Merge pull request #26 from krinkinmu/build-script-wip
[libcds.git] / tests / unit / map2 / map_find_string.cpp
1 //$$CDS-header$$
2
3 #include "map2/map_find_string.h"
4
5 namespace map2 {
6     CPPUNIT_TEST_SUITE_REGISTRATION( Map_find_string );
7
8     size_t Map_find_string::c_nThreadCount = 8      ;  // thread count
9     size_t Map_find_string::c_nMapSize = 20000000   ;  // map size (count of searching item)
10     size_t Map_find_string::c_nPercentExists = 50   ;  // percent of existing keys in searching sequence
11     size_t Map_find_string::c_nPassCount = 2;
12     size_t Map_find_string::c_nMaxLoadFactor = 8    ;  // maximum load factor
13     bool   Map_find_string::c_bPrintGCState = true;
14
15     void Map_find_string::generateSequence()
16     {
17         size_t nPercent = c_nPercentExists;
18
19         if ( nPercent > 100 )
20             nPercent = 100;
21         else if ( nPercent < 1 )
22             nPercent = 1;
23
24         m_nRealMapSize = 0;
25
26         std::vector<std::string> const & arrString = CppUnitMini::TestCase::getTestStrings();
27         size_t nSize = arrString.size();
28         if ( nSize > c_nMapSize )
29             nSize = c_nMapSize;
30         m_Arr.resize( nSize );
31         for ( size_t i = 0; i < nSize; ++i ) {
32             m_Arr[i].pKey = &( arrString[i] );
33             m_Arr[i].bExists = CppUnitMini::Rand( 100 ) <= nPercent;
34             if ( m_Arr[i].bExists )
35                 ++m_nRealMapSize;
36         }
37     }
38
39     void Map_find_string::initTestSequence()
40     {
41         if ( !m_bSeqInit ) {
42             m_bSeqInit = true;
43
44             CPPUNIT_MSG( "Generating test data...");
45             cds::OS::Timer    timer;
46             generateSequence();
47             CPPUNIT_MSG( "   Duration=" << timer.duration() );
48             CPPUNIT_MSG( "Map size=" << m_nRealMapSize << " find key loop=" << m_Arr.size() << " (" << c_nPercentExists << "% success)" );
49             CPPUNIT_MSG( "Thread count=" << c_nThreadCount << " Pass count=" << c_nPassCount );
50         }
51     }
52
53     void Map_find_string::setUpParams( const CppUnitMini::TestCfg& cfg )
54     {
55         c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
56         c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize );
57         c_nPercentExists = cfg.getSizeT("PercentExists", c_nPercentExists );
58         c_nPassCount = cfg.getSizeT("PassCount", c_nPassCount );
59         c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
60         c_bPrintGCState = cfg.getBool("PrintGCStateFlag", true );
61     }
62
63     void Map_find_string::myRun(const char *in_name, bool invert /*= false*/)
64     {
65         setUpParams( m_Cfg.get( "Map_find_string" ));
66
67         run_MichaelMap(in_name, invert);
68         run_SplitList(in_name, invert);
69         run_SkipListMap(in_name, invert);
70         run_EllenBinTreeMap(in_name, invert);
71         run_BronsonAVLTreeMap(in_name, invert);
72         run_StripedMap(in_name, invert);
73         run_RefinableMap(in_name, invert);
74         run_CuckooMap(in_name, invert);
75         run_StdMap(in_name, invert);
76
77         endTestCase();
78     }
79 } // namespace map2