OXYGENHUB
◆ main openmsx / src / unittest / SimpleHashSet_test.cc
1.6 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#include "catch.hpp"
2
3
#include "SimpleHashSet.hh"
4
5
6
TEST_CASE("SimpleHashSet")
7
{
8
	// construct
9
	SimpleHashSet<-1, std::hash<int>, std::equal_to<>> s;
10
	CHECK(s.capacity() == 0);
11
	CHECK(s.size() == 0);
12
	CHECK(s.empty());
13
14
	// insert 42
15
	CHECK(!s.contains(42));
16
	CHECK(!s.find(42));
17
	CHECK(s.insert(42)); // {42}
18
	CHECK(s.contains(42));
19
	CHECK(*(s.find(42)) == 42);
20
	CHECK(s.capacity() == 2);
21
	CHECK(s.size() == 1);
22
	CHECK(!s.empty());
23
24
	// reserve
25
	s.reserve(4);
26
	CHECK(s.capacity() == 4);
27
	CHECK(s.size() == 1);
28
29
	// insert 42 again
30
	CHECK(!s.insert(42)); // {42}
31
	CHECK(s.contains(42));
32
	CHECK(*(s.find(42)) == 42);
33
	CHECK(s.capacity() == 4);
34
	CHECK(s.size() == 1);
35
36
	// insert 1, 2, 3
37
	CHECK(s.insert(1));
38
	CHECK(s.insert(2));
39
	CHECK(s.insert(3)); // {1, 2, 3, 42}
40
	CHECK(*s.find(42) == 42);
41
	CHECK(*s.find(1) == 1);
42
	CHECK(*s.find(2) == 2);
43
	CHECK(*s.find(3) == 3);
44
	CHECK(!s.find(4));
45
	CHECK(!s.find(5));
46
	CHECK(s.size() == 4);
47
	CHECK(s.capacity() == 4);
48
49
	// insert 10, must grow
50
	CHECK(s.insert(10)); // {1, 2, 3, 10, 42}
51
	CHECK(*s.find(42) == 42);
52
	CHECK(*s.find(1) == 1);
53
	CHECK(*s.find(2) == 2);
54
	CHECK(*s.find(3) == 3);
55
	CHECK(!s.find(4));
56
	CHECK(!s.find(5));
57
	CHECK(*s.find(10) == 10);
58
	CHECK(s.size() == 5);
59
	CHECK(s.capacity() == 8);
60
61
	// erase non-existing
62
	CHECK(!s.erase(99));
63
	CHECK(s.size() == 5);
64
65
	// erase 1, 3
66
	CHECK(s.erase(1));
67
	CHECK(s.erase(3)); // {2, 10, 42}
68
	CHECK(*s.find(42) == 42);
69
	CHECK(!s.find(1));
70
	CHECK(*s.find(2) == 2);
71
	CHECK(!s.find(3));
72
	CHECK(!s.find(4));
73
	CHECK(!s.find(5));
74
	CHECK(*s.find(10) == 10);
75
	CHECK(s.size() == 3);
76
	CHECK(s.capacity() == 8);
77
}