1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <iterator> 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass TransformTest : public CPPUNIT_NS::TestCase 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(TransformTest); 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(trnsfrm1); 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(trnsfrm2); 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(self_str); 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void trnsfrm1(); 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void trnsfrm2(); 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void self_str(); 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static int negate_int(int a_) { 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return -a_; 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static char map_char(char a_, int b_) { 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return char(a_ + b_); 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static char shift( char c ) { 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return char(((int)c + 1) % 256); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(TransformTest); 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TransformTest::trnsfrm1() 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[6] = { -5, -1, 0, 1, 6, 11 }; 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int result[6]; 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott transform((int*)numbers, (int*)numbers + 6, (int*)result, negate_int); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[0]==5); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[1]==1); 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[2]==0); 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[3]==-1); 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[4]==-6); 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[5]==-11); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TransformTest::trnsfrm2() 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__MVS__) 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int trans[] = {-11, 4, -6, -6, -18, 0, 18, -14, 6, 0, -1, -59}; 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int trans[] = {-4, 4, -6, -6, -10, 0, 10, -6, 6, 0, -1, -77}; 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char n[] = "Larry Mullen"; 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_t count = ::strlen(n); 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott string res; 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott transform(n, n + count, trans, back_inserter(res), map_char); 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res == "Hello World!" ) 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TransformTest::self_str() 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott string s( "0123456789abcdefg" ); 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott string r( "123456789:bcdefgh" ); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott transform( s.begin(), s.end(), s.begin(), shift ); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( s == r ); 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 81