1#include <numeric> 2#include <vector> 3#include <algorithm> 4 5#include "iota.h" 6#include "cppunit/cppunit_proxy.h" 7 8#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9using namespace std; 10#endif 11 12// 13// TestCase class 14// 15class RndShuffleTest : public CPPUNIT_NS::TestCase 16{ 17 class MyRandomGenerator 18 { 19 public: 20 unsigned long operator()(unsigned long n_) 21 { 22 return rand() % n_; 23 } 24 }; 25 CPPUNIT_TEST_SUITE(RndShuffleTest); 26 CPPUNIT_TEST(rndshuf0); 27 CPPUNIT_TEST(rndshuf2); 28 CPPUNIT_TEST_SUITE_END(); 29 30protected: 31 void rndshuf0(); 32 void rndshuf2(); 33}; 34 35CPPUNIT_TEST_SUITE_REGISTRATION(RndShuffleTest); 36 37// 38// tests implementation 39// 40void RndShuffleTest::rndshuf0() 41{ 42 int numbers[6] = { 1, 2, 3, 4, 5, 6 }; 43 44 random_shuffle(numbers, numbers + 6); 45 46 CPPUNIT_ASSERT(count(numbers, numbers+6, 1)==1); 47 CPPUNIT_ASSERT(count(numbers, numbers+6, 2)==1); 48 CPPUNIT_ASSERT(count(numbers, numbers+6, 3)==1); 49 CPPUNIT_ASSERT(count(numbers, numbers+6, 4)==1); 50 CPPUNIT_ASSERT(count(numbers, numbers+6, 5)==1); 51 CPPUNIT_ASSERT(count(numbers, numbers+6, 6)==1); 52} 53void RndShuffleTest::rndshuf2() 54{ 55 vector <int> v1(10); 56 __iota(v1.begin(), v1.end(), 0); 57 58 MyRandomGenerator r; 59 for(int i = 0; i < 3; i++) 60 { 61 random_shuffle(v1.begin(), v1.end(), r); 62 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 0)==1); 63 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 1)==1); 64 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 2)==1); 65 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 3)==1); 66 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 4)==1); 67 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 5)==1); 68 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 6)==1); 69 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 7)==1); 70 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 8)==1); 71 CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 9)==1); 72 } 73} 74