Issue #23: Added std::random_device to TestCase class
authorkhizmax <khizmax@gmail.com>
Thu, 9 Apr 2015 17:47:04 +0000 (20:47 +0300)
committerkhizmax <khizmax@gmail.com>
Thu, 9 Apr 2015 17:47:04 +0000 (20:47 +0300)
tests/cppunit/cppunit_mini.h
tests/cppunit/test_main.cpp
tests/unit/map2/map_delodd.cpp
tests/unit/map2/map_delodd.h

index e0a8507b81acd61d32a0b17ff4df9623cafafcc1..9e88bae985e3feb79627112de997438b4940612a 100644 (file)
@@ -30,6 +30,8 @@
 #include <vector>
 #include <string>
 #include <map>
+#include <random>
+
 #include <assert.h>
 
 #include <boost/lexical_cast.hpp>
@@ -191,7 +193,13 @@ namespace CppUnitMini
 
     static void print_gc_state();
 
-    static std::vector<std::string> const &    getTestStrings();
+    static std::vector<std::string> const&    getTestStrings();
+
+    template <typename RandomIt>
+    void shuffle( RandomIt first, RandomIt last )
+    {
+        std::shuffle( first, last, m_RandomGen );
+    }
 
   protected:
     static std::vector<std::string>  m_arrStrings ;   // array of test strings
@@ -202,6 +210,10 @@ namespace CppUnitMini
       static std::string m_strTestDataDir;
       static bool m_bExactMatch;
 
+      // random shuffle support
+      static std::random_device m_RandomDevice;
+      static std::mt19937       m_RandomGen;
+
   protected:
     static int m_numErrors;
     static int m_numTests;
index 529defc7fb3fd6f13b1a73cef7144cadedde2dd1..c99fe5a33223234ba7ad01cc119146278719d9f6 100644 (file)
@@ -75,18 +75,22 @@ std::ostream& operator << (std::ostream& s, const cds::gc::hp::GarbageCollector:
 
 namespace CppUnitMini
 {
-  int TestCase::m_numErrors = 0;
-  int TestCase::m_numTests = 0;
-  std::vector<std::string>  TestCase::m_arrStrings;
-  bool TestCase::m_bPrintGCState = false;
-  std::string TestCase::m_strTestDataDir(".");
-  Config TestCase::m_Cfg;
-  bool TestCase::m_bExactMatch = false;
-
-  TestCase * TestCase::m_pCurTestCase = nullptr;
-
-  TestCase *TestCase::m_root = 0;
-  Reporter *TestCase::m_reporter = 0;
+    int TestCase::m_numErrors = 0;
+    int TestCase::m_numTests = 0;
+    std::vector<std::string>  TestCase::m_arrStrings;
+    bool TestCase::m_bPrintGCState = false;
+    std::string TestCase::m_strTestDataDir(".");
+    Config TestCase::m_Cfg;
+    bool TestCase::m_bExactMatch = false;
+
+    // random shuffle support
+    /*static*/ std::random_device TestCase::m_RandomDevice;
+    /*static*/ std::mt19937       TestCase::m_RandomGen( TestCase::m_RandomDevice() );
+
+    TestCase * TestCase::m_pCurTestCase = nullptr;
+
+    TestCase *TestCase::m_root = 0;
+    Reporter *TestCase::m_reporter = 0;
 
   void TestCase::registerTestCase(TestCase *in_testCase) {
     in_testCase->m_next = m_root;
index 8ddb4e98901dcb24dde841e782909d5854d49824..7c65caf29cdee2cf18d7e52e3bc2b32079b9b7a9 100644 (file)
@@ -33,8 +33,8 @@ namespace map2 {
             m_arrInsert[i] = i;
             m_arrRemove[i] = i;
         }
-        std::random_shuffle( m_arrInsert.begin(), m_arrInsert.end() );
-        std::random_shuffle( m_arrRemove.begin(), m_arrRemove.end() );
+        shuffle( m_arrInsert.begin(), m_arrInsert.end() );
+        shuffle( m_arrRemove.begin(), m_arrRemove.end() );
     }
 
     void Map_DelOdd::myRun(const char *in_name, bool invert /*= false*/)
index 56e2afc15b11e5d5b523fdd309f2c72ede75bd1c..4cda89e12cd719f7ea2d9386f2f9fe7a008f076f 100644 (file)
@@ -2,7 +2,6 @@
 
 #include "cppunit/thread.h"
 #include "map2/map_type.h"
-#include <algorithm> // random_shuffle
 #include <cds/os/topology.h>
 
 namespace map2 {