1 // Copyright (c) 2012-2016 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #include "limitedmap.h"
7 #include "test/test_bitcoin.h"
9 #include <boost/test/unit_test.hpp>
11 BOOST_FIXTURE_TEST_SUITE(limitedmap_tests
, BasicTestingSetup
)
13 BOOST_AUTO_TEST_CASE(limitedmap_test
)
15 // create a limitedmap capped at 10 items
16 limitedmap
<int, int> map(10);
18 // check that the max size is 10
19 BOOST_CHECK(map
.max_size() == 10);
21 // check that it's empty
22 BOOST_CHECK(map
.size() == 0);
25 map
.insert(std::pair
<int, int>(-1, -1));
27 // make sure that the size is updated
28 BOOST_CHECK(map
.size() == 1);
30 // make sure that the new item is in the map
31 BOOST_CHECK(map
.count(-1) == 1);
33 // insert 10 new items
34 for (int i
= 0; i
< 10; i
++) {
35 map
.insert(std::pair
<int, int>(i
, i
+ 1));
38 // make sure that the map now contains 10 items...
39 BOOST_CHECK(map
.size() == 10);
41 // ...and that the first item has been discarded
42 BOOST_CHECK(map
.count(-1) == 0);
44 // iterate over the map, both with an index and an iterator
45 limitedmap
<int, int>::const_iterator it
= map
.begin();
46 for (int i
= 0; i
< 10; i
++) {
47 // make sure the item is present
48 BOOST_CHECK(map
.count(i
) == 1);
50 // use the iterator to check for the expected key and value
51 BOOST_CHECK(it
->first
== i
);
52 BOOST_CHECK(it
->second
== i
+ 1);
54 // use find to check for the value
55 BOOST_CHECK(map
.find(i
)->second
== i
+ 1);
58 map
.update(it
, i
+ 2);
59 BOOST_CHECK(map
.find(i
)->second
== i
+ 2);
64 // check that we've exhausted the iterator
65 BOOST_CHECK(it
== map
.end());
67 // resize the map to 5 items
70 // check that the max size and size are now 5
71 BOOST_CHECK(map
.max_size() == 5);
72 BOOST_CHECK(map
.size() == 5);
74 // check that items less than 5 have been discarded
75 // and items greater than 5 are retained
76 for (int i
= 0; i
< 10; i
++) {
78 BOOST_CHECK(map
.count(i
) == 0);
80 BOOST_CHECK(map
.count(i
) == 1);
84 // erase some items not in the map
85 for (int i
= 100; i
< 1000; i
+= 100) {
89 // check that the size is unaffected
90 BOOST_CHECK(map
.size() == 5);
92 // erase the remaining elements
93 for (int i
= 5; i
< 10; i
++) {
97 // check that the map is now empty
98 BOOST_CHECK(map
.empty());
101 BOOST_AUTO_TEST_SUITE_END()