177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <numeric> 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <vector> 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <algorithm> 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <functional> 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && defined (_STLP_DEBUG) && defined (_STLP_DEBUG_MODE_THROWS) 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_DO_CHECK_BAD_PREDICATE 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stdexcept> 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "iota.h" 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "cppunit/cppunit_proxy.h" 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std; 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// TestCase class 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass PartialTest : public CPPUNIT_NS::TestCase 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST_SUITE(PartialTest); 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(parsrt0); 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(parsrt1); 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(parsrt2); 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(parsrtc0); 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(parsrtc1); 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(parsrtc2); 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DO_CHECK_BAD_PREDICATE) 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(bad_predicate_detected); 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(partsum0); 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(partsum1); 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(partsum2); 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected: 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void parsrt0(); 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void parsrt1(); 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void parsrt2(); 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void parsrtc0(); 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void parsrtc1(); 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void parsrtc2(); 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void partsum0(); 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void partsum1(); 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void partsum2(); 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void bad_predicate_detected(); 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool str_compare(const char* a_, const char* b_) 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return strcmp(a_, b_) < 0 ? 1 : 0; 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(PartialTest); 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// tests implementation 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::parsrt0() 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[6] = { 5, 2, 4, 3, 1, 6 }; 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort((int*)numbers, (int*)numbers + 3, (int*)numbers + 6); 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 2 3 5 4 6 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(numbers[0]==1); 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(numbers[1]==2); 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(numbers[2]==3); 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(numbers[3]==5); 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(numbers[4]==4); 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(numbers[5]==6); 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::parsrt1() 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 8 8 5 3 7 6 5 3 2 4 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 2 3 3 4 5 8 8 7 6 5 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[10] ={ 8, 8, 5, 3, 7, 6, 5, 3, 2, 4 }; 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> v1(numbers, numbers+10); 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort(v1.begin(), v1.begin() + v1.size() / 2, v1.end()); 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[0]==2); 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[1]==3); 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[2]==3); 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[3]==4); 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[4]==5); 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[5]==8); 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[6]==8); 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[7]==7); 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[8]==6); 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v1[9]==5); 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::parsrt2() 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char const* names[] = { "aa", "ff", "dd", "ee", "cc", "bb" }; 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const unsigned nameSize = sizeof(names) / sizeof(names[0]); 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <char const*> v1(nameSize); 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for(size_t i = 0; i < v1.size(); i++) 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner v1[i] = names[i]; 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort(v1.begin(), v1.begin() + nameSize / 2, v1.end(), str_compare); 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // aa bb cc ff ee dd 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp(v1[0], "aa") == 0 ); 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( v1[0] == names[0] ); 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp(v1[1], "bb") == 0 ); 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( v1[1] == names[5] ); 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp(v1[2], "cc") == 0 ); 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( v1[2] == names[4] ); 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp(v1[3], "ff") == 0 ); 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( v1[3] == names[1] ); 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp(v1[4], "ee") == 0 ); 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( v1[4] == names[3] ); 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp(v1[5], "dd") == 0 ); 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( v1[5] == names[2] ); 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::parsrtc0() 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[6] = { 5, 2, 4, 3, 1, 6 }; 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int result[3]; 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort_copy((int*)numbers, (int*)numbers + 6, (int*)result, (int*)result + 3); 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //1 2 3 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[0]==1); 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[1]==2); 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[2]==3); 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::parsrtc1() 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[10] ={ 3, 0, 4, 3, 2, 8, 2, 7, 7, 5 }; 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //3 0 4 3 2 8 2 7 7 5 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //0 2 2 3 3 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> v1(numbers, numbers+10); 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> result(5); 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end()); 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[0]==0); 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[1]==2); 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[2]==2); 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[3]==3); 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[4]==3); 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::parsrtc2() 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char const* names[] = { "aa", "ff", "dd", "ee", "cc", "bb" }; 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const unsigned nameSize = sizeof(names) / sizeof(names[0]); 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <char const*> v1(nameSize); 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for(size_t i = 0; i < v1.size(); i++) 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner v1[i] = names[i]; 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <char const*> result(3); 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end(), str_compare); 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // aa bb cc 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp( result[0], "aa" ) == 0 ); 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result[0] == names[0] ); 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp( result[1], "bb" ) == 0 ); 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result[1] == names[5] ); 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp( result[2], "cc" ) == 0 ); 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result[2] == names[4] ); 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DO_CHECK_BAD_PREDICATE) 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::bad_predicate_detected() 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[] = { 0, 0, 1, 0, 0, 1, 0, 0 }; 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const size_t s = sizeof(numbers) / sizeof(numbers[0]); 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort(numbers, numbers + s / 2, numbers + s, less_equal<int>()); 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Here is means that no exception has been raised 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( false ); 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const&) 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { /*OK bad predicate has been detected.*/ } 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int> result(s); 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sort_copy(numbers, numbers + s, result.begin(), result.end(), less_equal<int>()); 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Here is means that no exception has been raised 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( false ); 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const&) 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { /*OK bad predicate has been detected.*/ } 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::partsum0() 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[6] = { 1, 2, 3, 4, 5, 6 }; 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int result[6]; 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sum((int*)numbers, (int*)numbers + 6, (int*)result); 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 3 6 10 15 21 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[0]==1); 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[1]==3); 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[2]==6); 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[3]==10); 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[4]==15); 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(result[5]==21); 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::partsum1() 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> v1(10); 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __iota(v1.begin(), v1.end(), 0); 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> v2(v1.size()); 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sum(v1.begin(), v1.end(), v2.begin()); 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 1 3 6 10 15 21 28 36 45 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[0]==0); 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[1]==1); 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[2]==3); 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[3]==6); 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[4]==10); 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[5]==15); 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[6]==21); 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[7]==28); 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[8]==36); 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[9]==45); 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid PartialTest::partsum2() 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> v1(5); 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __iota(v1.begin(), v1.end(), 1); 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector <int> v2(v1.size()); 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner partial_sum(v1.begin(), v1.end(), v2.begin(), multiplies<int>()); 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 2 6 24 120 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[0]==1); 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[1]==2); 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[2]==6); 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[3]==24); 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(v2[4]==120); 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 249