Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenequal_test.cpp
Go to the documentation of this file.
00001 #include <vector> 00002 #include <algorithm> 00003 #include <functional> 00004 #include "cppunit/cppunit_proxy.h" 00005 00006 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 00007 using namespace std; 00008 #endif 00009 00010 // 00011 // TestCase class 00012 // 00013 class EqualTest : public CPPUNIT_NS::TestCase 00014 { 00015 CPPUNIT_TEST_SUITE(EqualTest); 00016 CPPUNIT_TEST(equal_range0); 00017 CPPUNIT_TEST(equal_range1); 00018 CPPUNIT_TEST(equal_range2); 00019 CPPUNIT_TEST(equal0); 00020 CPPUNIT_TEST(equal1); 00021 CPPUNIT_TEST(equal2); 00022 CPPUNIT_TEST(equalto); 00023 CPPUNIT_TEST_SUITE_END(); 00024 00025 protected: 00026 void equal_range0(); 00027 void equal_range1(); 00028 void equal_range2(); 00029 void equal0(); 00030 void equal1(); 00031 void equal2(); 00032 void equalto(); 00033 static bool values_squared(int a_, int b_); 00034 }; 00035 00036 CPPUNIT_TEST_SUITE_REGISTRATION(EqualTest); 00037 00038 // 00039 // tests implementation 00040 // 00041 void EqualTest::equal_range0() 00042 { 00043 int numbers[10] = { 0, 0, 1, 1, 2, 2, 2, 2, 3, 3 }; 00044 pair<int*, int*> range = equal_range((int*)numbers, (int*)numbers + 10, 2); 00045 CPPUNIT_ASSERT( (range.first - numbers) == 4 ); 00046 CPPUNIT_ASSERT( (range.second - numbers) == 8 ); 00047 } 00048 00049 void EqualTest::equal_range1() 00050 { 00051 typedef vector <int> IntVec; 00052 IntVec v(10); 00053 for (int i = 0; (size_t)i < v.size(); ++i) 00054 v[i] = i / 3; 00055 00056 pair<IntVec::iterator, IntVec::iterator> range = equal_range(v.begin(), v.end(), 2); 00057 CPPUNIT_ASSERT( (range.first - v.begin()) == 6 ); 00058 CPPUNIT_ASSERT( (range.second - v.begin()) == 9 ); 00059 for (; range.first != range.second; ++range.first) 00060 CPPUNIT_ASSERT( *range.first == 2 ); 00061 00062 range = equal_range(v.begin(), v.end(), 4); 00063 CPPUNIT_ASSERT( range.first == range.second ); 00064 CPPUNIT_ASSERT( range.first == v.end() ); 00065 } 00066 00067 struct Test { 00068 #if defined (__DMC__) 00069 Test(); 00070 #endif 00071 00072 Test(int val) : value(val) {} 00073 int value; 00074 00075 bool operator == (int i) const 00076 { return value == i; } 00077 }; 00078 00079 bool operator < (const Test& v1, int v2) 00080 { return v1.value < v2; } 00081 00082 bool operator < (int v1, const Test& v2) 00083 { return v1 < v2.value; } 00084 00085 #if defined (_MSC_VER) && !defined (STLPORT) 00086 bool operator < (const Test& v1, const Test& v2) 00087 { return v1.value < v2.value; } 00088 #endif 00089 00090 void EqualTest::equal_range2() 00091 { 00092 char chars[] = "aabbccddggghhklllmqqqqssyyzz"; 00093 00094 const unsigned count = sizeof(chars) - 1; 00095 pair<char*, char*> range = equal_range((char*)chars, (char*)chars + count, 'q', less<char>()); 00096 CPPUNIT_ASSERT( (range.first - chars) == 18 ); 00097 CPPUNIT_ASSERT( (range.second - chars) == 22 ); 00098 for (; range.first != range.second; ++range.first) 00099 CPPUNIT_ASSERT( *range.first == 'q' ); 00100 00101 range = equal_range((char*)chars, (char*)chars + count, 'm', less<char>()); 00102 CPPUNIT_ASSERT( (range.second - range.first) == 1 ); 00103 CPPUNIT_ASSERT( *range.first == 'm' ); 00104 00105 vector<Test> tv; 00106 vector<Test>::iterator it; 00107 pair<vector<Test>::iterator, vector<Test>::iterator> p; 00108 00109 for (int i = 0; i < 10; ++i) { 00110 tv.push_back(i); 00111 } 00112 00113 it = upper_bound(tv.begin(), tv.end(), 5); 00114 CPPUNIT_ASSERT( it != tv.end() ); 00115 CPPUNIT_ASSERT( *it == 6 ); 00116 00117 it = lower_bound(tv.begin(), tv.end(), 5); 00118 CPPUNIT_ASSERT( it != tv.end() ); 00119 CPPUNIT_ASSERT( *it == 5 ); 00120 00121 p = equal_range(tv.begin(), tv.end(), 5); 00122 CPPUNIT_ASSERT( p.first != p.second ); 00123 CPPUNIT_ASSERT( p.first != tv.end() ); 00124 CPPUNIT_ASSERT( p.second != tv.end() ); 00125 CPPUNIT_ASSERT( *p.first == 5 ); 00126 CPPUNIT_ASSERT( *p.second == 6 ); 00127 } 00128 00129 void EqualTest::equal0() 00130 { 00131 int numbers1[5] = { 1, 2, 3, 4, 5 }; 00132 int numbers2[5] = { 1, 2, 4, 8, 16 }; 00133 int numbers3[2] = { 1, 2 }; 00134 00135 CPPUNIT_ASSERT( !equal(numbers1, numbers1 + 5, numbers2) ); 00136 CPPUNIT_ASSERT( equal(numbers3, numbers3 + 2, numbers1) ); 00137 } 00138 00139 void EqualTest::equal1() 00140 { 00141 vector <int> v1(10); 00142 for (int i = 0; (size_t)i < v1.size(); ++i) 00143 v1[i] = i; 00144 vector <int> v2(10); 00145 CPPUNIT_ASSERT( !equal(v1.begin(), v1.end(), v2.begin()) ); 00146 00147 copy(v1.begin(), v1.end(), v2.begin()); 00148 CPPUNIT_ASSERT( equal(v1.begin(), v1.end(), v2.begin()) ) 00149 } 00150 00151 void EqualTest::equal2() 00152 { 00153 vector <int> v1(10); 00154 vector <int> v2(10); 00155 for (int i = 0; (size_t)i < v1.size(); ++i) { 00156 v1[i] = i; 00157 v2[i] = i * i; 00158 } 00159 CPPUNIT_ASSERT( equal(v1.begin(), v1.end(), v2.begin(), values_squared) ); 00160 } 00161 00162 void EqualTest::equalto() 00163 { 00164 int input1 [4] = { 1, 7, 2, 2 }; 00165 int input2 [4] = { 1, 6, 2, 3 }; 00166 00167 int output [4]; 00168 transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, equal_to<int>()); 00169 CPPUNIT_ASSERT( output[0] == 1 ); 00170 CPPUNIT_ASSERT( output[1] == 0 ); 00171 CPPUNIT_ASSERT( output[2] == 1 ); 00172 CPPUNIT_ASSERT( output[3] == 0 ); 00173 } 00174 00175 bool EqualTest::values_squared(int a_, int b_) 00176 { 00177 return (a_ * a_ == b_); 00178 } Generated on Sun May 27 2012 04:35:24 for ReactOS by
1.7.6.1
|