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