transform_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
1f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include <string> 2f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include <iterator> 3f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include <vector> 4f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include <algorithm> 5f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 6f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include "cppunit/cppunit_proxy.h" 7f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 8f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarusing namespace std; 10f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#endif 11f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 12f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// 13686775deca8b8685eb90801495880e3abdd844c2Chris Lattner// TestCase class 14f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// 15f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarclass TransformTest : public CPPUNIT_NS::TestCase 16f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar{ 17f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar CPPUNIT_TEST_SUITE(TransformTest); 18f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar CPPUNIT_TEST(trnsfrm1); 19f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar CPPUNIT_TEST(trnsfrm2); 20f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar CPPUNIT_TEST(self_str); 21bb23628148f555a4cf71f98c27096a7a804c085cNico Weber CPPUNIT_TEST_SUITE_END(); 22b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier 23b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosierprotected: 24ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer void trnsfrm1(); 25b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier void trnsfrm2(); 2680ad52f327b532bded5c5b0ee38779d841c6cd35Richard Smith void self_str(); 275ba49c0177bd594a9760956f51293b5731b03d6dRichard Smith 28ef8225444452a1486bd721f3285301fe84643b00Stephen Hines static int negate_int(int a_) { 29ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return -a_; 30ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 31ef8225444452a1486bd721f3285301fe84643b00Stephen Hines static char map_char(char a_, int b_) { 32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return char(a_ + b_); 33f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar } 34f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar static char shift( char c ) { 35f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar return char(((int)c + 1) % 256); 36f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar } 37f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}; 38f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 39f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel DunbarCPPUNIT_TEST_SUITE_REGISTRATION(TransformTest); 40f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 41f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// 42f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// tests implementation 43f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// 44f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarvoid TransformTest::trnsfrm1() 45f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar{ 46f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar int numbers[6] = { -5, -1, 0, 1, 6, 11 }; 47f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 48f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar int result[6]; 49f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar transform((int*)numbers, (int*)numbers + 6, (int*)result, negate_int); 50f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 51f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar CPPUNIT_ASSERT(result[0]==5); 52fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar CPPUNIT_ASSERT(result[1]==1); 53fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar CPPUNIT_ASSERT(result[2]==0); 54fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar CPPUNIT_ASSERT(result[3]==-1); 55fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar CPPUNIT_ASSERT(result[4]==-6); 56fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar CPPUNIT_ASSERT(result[5]==-11); 57fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar} 58bb23628148f555a4cf71f98c27096a7a804c085cNico Webervoid TransformTest::trnsfrm2() 59bb23628148f555a4cf71f98c27096a7a804c085cNico Weber{ 60f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#if defined (__MVS__) 61b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier int trans[] = {-11, 4, -6, -6, -18, 0, 18, -14, 6, 0, -1, -59}; 62b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier#else 63b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier int trans[] = {-4, 4, -6, -6, -10, 0, 10, -6, 6, 0, -1, -77}; 64f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#endif 65f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar char n[] = "Larry Mullen"; 66f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar const size_t count = ::strlen(n); 67ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer 68ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer string res; 697e7fbd05a5dfdb0addfc8b5af2fcbed8c7b5fb87Peter Collingbourne transform(n, n + count, trans, back_inserter(res), map_char); 70f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar CPPUNIT_ASSERT( res == "Hello World!" ) 71f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar} 72f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 73ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesvoid TransformTest::self_str() 7480ad52f327b532bded5c5b0ee38779d841c6cd35Richard Smith{ 75f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar string s( "0123456789abcdefg" ); 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hines string r( "123456789:bcdefgh" ); 775ba49c0177bd594a9760956f51293b5731b03d6dRichard Smith transform( s.begin(), s.end(), s.begin(), shift ); 785ba49c0177bd594a9760956f51293b5731b03d6dRichard Smith CPPUNIT_ASSERT( s == r ); 79ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 80ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 81ef8225444452a1486bd721f3285301fe84643b00Stephen Hines