1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <numeric> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <functional> 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_DEBUG) && defined (_STLP_DEBUG_MODE_THROWS) 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DO_CHECK_BAD_PREDICATE 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stdexcept> 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "iota.h" 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass PartialTest : public CPPUNIT_NS::TestCase 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(PartialTest); 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(parsrt0); 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(parsrt1); 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(parsrt2); 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(parsrtc0); 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(parsrtc1); 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(parsrtc2); 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_DO_CHECK_BAD_PREDICATE) 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(bad_predicate_detected); 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(partsum0); 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(partsum1); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(partsum2); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void parsrt0(); 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void parsrt1(); 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void parsrt2(); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void parsrtc0(); 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void parsrtc1(); 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void parsrtc2(); 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void partsum0(); 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void partsum1(); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void partsum2(); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void bad_predicate_detected(); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static bool str_compare(const char* a_, const char* b_) 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return strcmp(a_, b_) < 0 ? 1 : 0; 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(PartialTest); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::parsrt0() 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[6] = { 5, 2, 4, 3, 1, 6 }; 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort((int*)numbers, (int*)numbers + 3, (int*)numbers + 6); 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 2 3 5 4 6 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(numbers[0]==1); 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(numbers[1]==2); 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(numbers[2]==3); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(numbers[3]==5); 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(numbers[4]==4); 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(numbers[5]==6); 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::parsrt1() 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 8 8 5 3 7 6 5 3 2 4 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 2 3 3 4 5 8 8 7 6 5 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[10] ={ 8, 8, 5, 3, 7, 6, 5, 3, 2, 4 }; 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> v1(numbers, numbers+10); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort(v1.begin(), v1.begin() + v1.size() / 2, v1.end()); 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[0]==2); 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[1]==3); 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[2]==3); 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[3]==4); 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[4]==5); 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[5]==8); 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[6]==8); 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[7]==7); 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[8]==6); 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v1[9]==5); 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::parsrt2() 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char const* names[] = { "aa", "ff", "dd", "ee", "cc", "bb" }; 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const unsigned nameSize = sizeof(names) / sizeof(names[0]); 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <char const*> v1(nameSize); 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(size_t i = 0; i < v1.size(); i++) 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott v1[i] = names[i]; 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort(v1.begin(), v1.begin() + nameSize / 2, v1.end(), str_compare); 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // aa bb cc ff ee dd 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp(v1[0], "aa") == 0 ); 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( v1[0] == names[0] ); 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp(v1[1], "bb") == 0 ); 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( v1[1] == names[5] ); 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp(v1[2], "cc") == 0 ); 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( v1[2] == names[4] ); 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp(v1[3], "ff") == 0 ); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( v1[3] == names[1] ); 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp(v1[4], "ee") == 0 ); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( v1[4] == names[3] ); 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp(v1[5], "dd") == 0 ); 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( v1[5] == names[2] ); 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::parsrtc0() 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[6] = { 5, 2, 4, 3, 1, 6 }; 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int result[3]; 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort_copy((int*)numbers, (int*)numbers + 6, (int*)result, (int*)result + 3); 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //1 2 3 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[0]==1); 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[1]==2); 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[2]==3); 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::parsrtc1() 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[10] ={ 3, 0, 4, 3, 2, 8, 2, 7, 7, 5 }; 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //3 0 4 3 2 8 2 7 7 5 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //0 2 2 3 3 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> v1(numbers, numbers+10); 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> result(5); 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end()); 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[0]==0); 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[1]==2); 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[2]==2); 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[3]==3); 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[4]==3); 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::parsrtc2() 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char const* names[] = { "aa", "ff", "dd", "ee", "cc", "bb" }; 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const unsigned nameSize = sizeof(names) / sizeof(names[0]); 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <char const*> v1(nameSize); 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(size_t i = 0; i < v1.size(); i++) 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott v1[i] = names[i]; 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <char const*> result(3); 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end(), str_compare); 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // aa bb cc 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp( result[0], "aa" ) == 0 ); 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( result[0] == names[0] ); 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp( result[1], "bb" ) == 0 ); 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( result[1] == names[5] ); 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( strcmp( result[2], "cc" ) == 0 ); 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( result[2] == names[4] ); 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_DO_CHECK_BAD_PREDICATE) 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::bad_predicate_detected() 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[] = { 0, 0, 1, 0, 0, 1, 0, 0 }; 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_t s = sizeof(numbers) / sizeof(numbers[0]); 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort(numbers, numbers + s / 2, numbers + s, less_equal<int>()); 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Here is means that no exception has been raised 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( false ); 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const&) 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { /*OK bad predicate has been detected.*/ } 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> result(s); 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sort_copy(numbers, numbers + s, result.begin(), result.end(), less_equal<int>()); 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Here is means that no exception has been raised 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( false ); 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const&) 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { /*OK bad predicate has been detected.*/ } 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::partsum0() 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int numbers[6] = { 1, 2, 3, 4, 5, 6 }; 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int result[6]; 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sum((int*)numbers, (int*)numbers + 6, (int*)result); 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 3 6 10 15 21 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[0]==1); 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[1]==3); 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[2]==6); 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[3]==10); 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[4]==15); 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(result[5]==21); 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::partsum1() 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> v1(10); 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __iota(v1.begin(), v1.end(), 0); 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> v2(v1.size()); 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sum(v1.begin(), v1.end(), v2.begin()); 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 1 3 6 10 15 21 28 36 45 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[0]==0); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[1]==1); 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[2]==3); 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[3]==6); 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[4]==10); 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[5]==15); 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[6]==21); 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[7]==28); 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[8]==36); 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[9]==45); 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid PartialTest::partsum2() 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> v1(5); 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __iota(v1.begin(), v1.end(), 1); 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector <int> v2(v1.size()); 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott partial_sum(v1.begin(), v1.end(), v2.begin(), multiplies<int>()); 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 2 6 24 120 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[0]==1); 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[1]==2); 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[2]==6); 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[3]==24); 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(v2[4]==120); 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 249