ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

equal_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.