Files
jsix_import/src/tests/map.cpp
F in Chat for Tabs 8f529046a9 [project] Lose the battle between tabs & spaces
I'm a tabs guy. I like tabs, it's an elegant way to represent
indentation instead of brute-forcing it. But I have to admit that the
world seems to be going towards spaces, and tooling tends not to play
nice with tabs. So here we go, changing the whole repo to spaces since
I'm getting tired of all the inconsistent formatting.
2021-08-01 17:46:16 -07:00

96 lines
2.2 KiB
C++

#include "kutil/map.h"
#include "catch.hpp"
using Catch::rng;
std::uniform_int_distribution<int> distrib {0, 10000};
TEST_CASE( "map insertion", "[containers] [map]" )
{
std::vector<int> ints;
for (int i = 0; i < 1000; ++i)
ints.push_back(i);
size_t sizes[] = {1, 2, 3, 5, 100};
for (size_t s : sizes) {
kutil::map<int, int> v;
std::shuffle(ints.begin(), ints.end(), rng());
for (int i = 0; i < s; ++i) {
v.insert(ints[i], ints[i]);
}
for (int i = 0; i < s; ++i) {
int *p = v.find(ints[i]);
CAPTURE( s );
CAPTURE( i );
CAPTURE( ints[i] );
CAPTURE( kutil::hash(ints[i]) );
CHECK( p );
CHECK( *p == ints[i] );
}
}
}
TEST_CASE( "map deletion", "[containers] [map]" )
{
std::vector<int> ints;
for (int i = 0; i < 1000; ++i)
ints.push_back(i);
size_t sizes[] = {1, 2, 3, 5, 100};
for (size_t s : sizes) {
kutil::map<int, int> v;
std::shuffle(ints.begin(), ints.end(), rng());
for (int i = 0; i < s; ++i) {
v.insert(ints[i], ints[i]);
}
for (int i = 0; i < s; i += 2) {
v.erase(ints[i]);
}
for (int i = 0; i < s; ++i) {
int *p = v.find(ints[i]);
CAPTURE( s );
CAPTURE( i );
CAPTURE( ints[i] );
CAPTURE( kutil::hash(ints[i]) );
if ( i%2 )
CHECK( p );
else
CHECK( !p );
}
}
}
TEST_CASE( "map with pointer vals", "[containers] [map]" )
{
kutil::map<int, int*> v;
int is[4] = { 0, 0, 0, 0 };
for (int i = 0; i < 4; ++i)
v.insert(i*7, &is[i]);
for (int i = 0; i < 4; ++i) {
int *p = v.find(i*7);
CHECK( p == &is[i] );
}
CHECK( v.find(3) == nullptr );
}
TEST_CASE( "map with uint64_t keys", "[containers] [map]" )
{
kutil::map<uint64_t, int> v;
int is[4] = { 2, 3, 5, 7 };
for (uint64_t i = 0; i < 4; ++i)
v.insert(i+1, is[i]);
for (uint64_t i = 0; i < 4; ++i) {
int *p = v.find(i+1);
CHECK( *p == is[i] );
}
CHECK( v.find(30) == nullptr );
}