1 : // $Id: StructureTest.cc 35 2007-04-27 11:26:33Z tb $
2 :
3 : /*
4 : * STX B+ Tree Template Classes v0.7
5 : * Copyright (C) 2007 Timo Bingmann
6 : *
7 : * This library is free software; you can redistribute it and/or modify it
8 : * under the terms of the GNU Lesser General Public License as published by the
9 : * Free Software Foundation; either version 2.1 of the License, or (at your
10 : * option) any later version.
11 : *
12 : * This library is distributed in the hope that it will be useful, but WITHOUT
13 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 : * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15 : * for more details.
16 : *
17 : * You should have received a copy of the GNU Lesser General Public License
18 : * along with this library; if not, write to the Free Software Foundation,
19 : * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 : */
21 :
22 : #include <cppunit/extensions/HelperMacros.h>
23 :
24 : #include <stdlib.h>
25 :
26 : #include <stx/btree_multiset.h>
27 :
28 : class StructureTest : public CPPUNIT_NS::TestFixture
29 2 : {
30 3 : CPPUNIT_TEST_SUITE( StructureTest );
31 1 : CPPUNIT_TEST(test_insert_erase);
32 2 : CPPUNIT_TEST_SUITE_END();
33 :
34 : public:
35 :
36 : struct testdata
37 : {
38 : unsigned int a, b;
39 :
40 : // required by the btree
41 73924 : testdata()
42 73924 : : a(0), b(0)
43 : {
44 73924 : }
45 :
46 : // also used as implicit conversion constructor
47 640 : inline testdata(unsigned int _a)
48 640 : : a(_a), b(0)
49 : {
50 640 : }
51 : };
52 :
53 : protected:
54 :
55 : struct testcomp
56 : {
57 : unsigned int somevalue;
58 :
59 1 : inline testcomp(unsigned int sv)
60 1 : : somevalue(sv)
61 : {
62 1 : }
63 :
64 406708 : bool operator()(const struct testdata &a, const struct testdata &b) const
65 : {
66 406708 : return a.a > b.a;
67 : }
68 : };
69 :
70 : struct traits_nodebug
71 : {
72 : static const bool selfverify = true;
73 : static const bool debug = false;
74 :
75 : static const int leafslots = 8;
76 : static const int innerslots = 8;
77 : };
78 :
79 1 : void test_insert_erase()
80 : {
81 : typedef stx::btree_multiset<struct testdata, struct testcomp, struct traits_nodebug> btree_type;
82 :
83 1 : btree_type bt( testcomp(42) );
84 :
85 1 : srand(34234235);
86 642 : for(unsigned int i = 0; i < 320; i++)
87 : {
88 320 : CPPUNIT_ASSERT(bt.size() == i);
89 320 : bt.insert(rand() % 100);
90 320 : CPPUNIT_ASSERT(bt.size() == i + 1);
91 : }
92 :
93 1 : srand(34234235);
94 642 : for(unsigned int i = 0; i < 320; i++)
95 : {
96 320 : CPPUNIT_ASSERT(bt.size() == 320 - i);
97 640 : CPPUNIT_ASSERT( bt.erase_one(rand() % 100) );
98 640 : CPPUNIT_ASSERT(bt.size() == 320 - i - 1);
99 1 : }
100 1 : }
101 : };
102 :
103 : inline std::ostream& operator<< (std::ostream &o, const struct StructureTest::testdata &t)
104 : {
105 : return o << t.a;
106 : }
107 0 :
108 3 : CPPUNIT_TEST_SUITE_REGISTRATION( StructureTest );
|