#include <vector> #include <algorithm> #include "cppunit/cppunit_proxy.h" #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) using namespace std; #endif // // TestCase class // class RmCpTest : public CPPUNIT_NS::TestCase { CPPUNIT_TEST_SUITE(RmCpTest); CPPUNIT_TEST(remcopy1); CPPUNIT_TEST(remcpif1); CPPUNIT_TEST(remif1); CPPUNIT_TEST(remove1); CPPUNIT_TEST(repcpif1); CPPUNIT_TEST(replace0); CPPUNIT_TEST(replace1); CPPUNIT_TEST(replcpy1); CPPUNIT_TEST(replif1); CPPUNIT_TEST(revcopy1); CPPUNIT_TEST(reverse1); CPPUNIT_TEST_SUITE_END(); protected: void remcopy1(); void remcpif1(); void remif1(); void remove1(); void repcpif1(); void replace0(); void replace1(); void replcpy1(); void replif1(); void revcopy1(); void reverse1(); }; CPPUNIT_TEST_SUITE_REGISTRATION(RmCpTest); static bool odd(int a_) { return (a_ % 2) != 0; } // // tests implementation // void RmCpTest::reverse1() { int numbers[6] = { 0, 1, 2, 3, 4, 5 }; reverse(numbers, numbers + 6); CPPUNIT_ASSERT(numbers[0]==5); CPPUNIT_ASSERT(numbers[1]==4); CPPUNIT_ASSERT(numbers[2]==3); CPPUNIT_ASSERT(numbers[3]==2); CPPUNIT_ASSERT(numbers[4]==1); CPPUNIT_ASSERT(numbers[5]==0); } void RmCpTest::revcopy1() { int numbers[6] = { 0, 1, 2, 3, 4, 5 }; int result[6]; reverse_copy((int*)numbers, (int*)numbers + 6, (int*)result); // 5 4 3 2 1 0 CPPUNIT_ASSERT(result[0]==5); CPPUNIT_ASSERT(result[1]==4); CPPUNIT_ASSERT(result[2]==3); CPPUNIT_ASSERT(result[3]==2); CPPUNIT_ASSERT(result[4]==1); CPPUNIT_ASSERT(result[5]==0); } void RmCpTest::replif1() { vector <int> v1(10); for (int i = 0; (size_t)i < v1.size(); ++i) v1[i] = i % 5; replace_if(v1.begin(), v1.end(), odd, 42); // 0 42 2 42 4 0 42 2 42 4 CPPUNIT_ASSERT(v1[0]==0); CPPUNIT_ASSERT(v1[1]==42); CPPUNIT_ASSERT(v1[2]==2); CPPUNIT_ASSERT(v1[3]==42); CPPUNIT_ASSERT(v1[4]==4); CPPUNIT_ASSERT(v1[5]==0); CPPUNIT_ASSERT(v1[6]==42); CPPUNIT_ASSERT(v1[7]==2); CPPUNIT_ASSERT(v1[8]==42); CPPUNIT_ASSERT(v1[9]==4); } void RmCpTest::replcpy1() { int numbers[6] = { 0, 1, 2, 0, 1, 2 }; int result[6] = { 0, 0, 0, 0, 0, 0 }; replace_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2, 42); CPPUNIT_ASSERT(result[0]==0); CPPUNIT_ASSERT(result[1]==1); CPPUNIT_ASSERT(result[2]==42); CPPUNIT_ASSERT(result[3]==0); CPPUNIT_ASSERT(result[4]==1); CPPUNIT_ASSERT(result[5]==42); } void RmCpTest::replace0() { int numbers[6] = { 0, 1, 2, 0, 1, 2 }; replace(numbers, numbers + 6, 2, 42); // 0 1 42 0 1 42 CPPUNIT_ASSERT(numbers[0]==0); CPPUNIT_ASSERT(numbers[1]==1); CPPUNIT_ASSERT(numbers[2]==42); CPPUNIT_ASSERT(numbers[3]==0); CPPUNIT_ASSERT(numbers[4]==1); CPPUNIT_ASSERT(numbers[5]==42); } void RmCpTest::replace1() { vector <int> v1(10); for (int i = 0; (size_t)i < v1.size(); ++i) v1[i] = i % 5; replace(v1.begin(), v1.end(), 2, 42); // 0 1 2 3 4 0 1 2 3 4 // 0 1 42 3 4 0 1 42 3 4 CPPUNIT_ASSERT(v1[0]==0); CPPUNIT_ASSERT(v1[1]==1); CPPUNIT_ASSERT(v1[2]==42); CPPUNIT_ASSERT(v1[3]==3); CPPUNIT_ASSERT(v1[4]==4); CPPUNIT_ASSERT(v1[5]==0); CPPUNIT_ASSERT(v1[6]==1); CPPUNIT_ASSERT(v1[7]==42); CPPUNIT_ASSERT(v1[8]==3); CPPUNIT_ASSERT(v1[9]==4); } void RmCpTest::repcpif1() { vector <int> v1(10); for (int i = 0; (size_t)i < v1.size(); ++i) v1[i] = i % 5; vector <int> v2(v1.size()); // 0 1 2 3 4 0 1 2 3 4 // 0 1 2 3 4 0 1 2 3 4 // 0 42 2 42 4 0 42 2 42 4 replace_copy_if(v1.begin(), v1.end(), v2.begin(), odd, 42); CPPUNIT_ASSERT(v1[0]==0); CPPUNIT_ASSERT(v1[1]==1); CPPUNIT_ASSERT(v1[2]==2); CPPUNIT_ASSERT(v1[3]==3); CPPUNIT_ASSERT(v1[4]==4); CPPUNIT_ASSERT(v1[5]==0); CPPUNIT_ASSERT(v1[6]==1); CPPUNIT_ASSERT(v1[7]==2); CPPUNIT_ASSERT(v1[8]==3); CPPUNIT_ASSERT(v1[9]==4); CPPUNIT_ASSERT(v2[0]==0); CPPUNIT_ASSERT(v2[1]==42); CPPUNIT_ASSERT(v2[2]==2); CPPUNIT_ASSERT(v2[3]==42); CPPUNIT_ASSERT(v2[4]==4); CPPUNIT_ASSERT(v2[5]==0); CPPUNIT_ASSERT(v2[6]==42); CPPUNIT_ASSERT(v2[7]==2); CPPUNIT_ASSERT(v2[8]==42); CPPUNIT_ASSERT(v2[9]==4); } void RmCpTest::remove1() { int numbers[6] = { 1, 2, 3, 1, 2, 3 }; remove((int*)numbers, (int*)numbers + 6, 1); // 2 3 2 3 2 3 CPPUNIT_ASSERT(numbers[0]==2); CPPUNIT_ASSERT(numbers[1]==3); CPPUNIT_ASSERT(numbers[2]==2); CPPUNIT_ASSERT(numbers[3]==3); CPPUNIT_ASSERT(numbers[4]==2); CPPUNIT_ASSERT(numbers[5]==3); } void RmCpTest::remif1() { int numbers[6] = { 0, 0, 1, 1, 2, 2 }; remove_if((int*)numbers, (int*)numbers + 6, odd); // 0 0 2 2 2 2 CPPUNIT_ASSERT(numbers[0]==0); CPPUNIT_ASSERT(numbers[1]==0); CPPUNIT_ASSERT(numbers[2]==2); CPPUNIT_ASSERT(numbers[3]==2); CPPUNIT_ASSERT(numbers[4]==2); CPPUNIT_ASSERT(numbers[5]==2); } void RmCpTest::remcopy1() { int numbers[6] = { 1, 2, 3, 1, 2, 3 }; int result[6] = { 0, 0, 0, 0, 0, 0 }; remove_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2); CPPUNIT_ASSERT(result[0]==1); CPPUNIT_ASSERT(result[1]==3); CPPUNIT_ASSERT(result[2]==1); CPPUNIT_ASSERT(result[3]==3); CPPUNIT_ASSERT(result[4]==0); CPPUNIT_ASSERT(result[5]==0); } void RmCpTest::remcpif1() { int numbers[6] = { 1, 2, 3, 1, 2, 3 }; int result[6] = { 0, 0, 0, 0, 0, 0 }; remove_copy_if((int*)numbers, (int*)numbers + 6, (int*)result, odd); // 2 2 0 0 0 0 CPPUNIT_ASSERT(result[0]==2); CPPUNIT_ASSERT(result[1]==2); CPPUNIT_ASSERT(result[2]==0); CPPUNIT_ASSERT(result[3]==0); CPPUNIT_ASSERT(result[4]==0); CPPUNIT_ASSERT(result[5]==0); }