openMSX
SimpleHashSet_test.cc
Go to the documentation of this file.
1 #include "catch.hpp"
2 
3 #include "SimpleHashSet.hh"
4 
5 
6 TEST_CASE("SimpleHashSet")
7 {
8  // construct
9  SimpleHashSet<int, -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 }
TEST_CASE("SimpleHashSet")
CHECK(m3==m3)