4 #include <hpc/SM_ParallelMergeSort.h>
8 using namespace helios::hpc;
10 namespace HeliosTests{
38 bool SM_testParallelMergeSort();
44 bool operator() (
int i,
int j) {
return (i<j);}
47 bool operator() (
float i,
float j) {
return (i<j);}
50 bool operator() (
double i,
double j) {
return (i<j);}
57 if(!SM_testParallelMergeSort())
return false;
65 bool HPCTest::SM_testParallelMergeSort(){
67 std::vector<int> X1({1, 7, 6, 5, 2, 3, 9, 11, 25, -7, -8, 3, -3, 6});
68 std::vector<float> X2({1.0, -1.0, 2.0});
69 std::vector<double> X3({-1.0, 1.0, -2.0, 2.0, 3.5, 2.5, 7.1, -3.6, 2.88});
71 22, 12, 27, 14, 31, 21, 12, 21, 3, 0, 14, 5, 3, 28, 8, 9, 23,
72 30, 22, 8, 23, 16, 7, 16, 14, 7, 6, 2, 8, 15, 2, 3, 0, 6,
73 6, 11, 10, 0, 7, 7, 11, 28, 28, 21, 23, 16, 18, 17, 8, 23, 1,
74 29, 2, 17, 16, 17, 11, 13, 13, 3, 4, 20, 20, 15, 18, 0, 0, 27,
75 14, 11, 18, 10, 14, 6, 6, 25, 11, 18, 3, 5, 10, 2, 30, 24, 9,
76 13, 24, 18, 9, 31, 1, 19, 3, 2, 12, 30, 15, 21, 15, 23, 20, 26,
77 25, 17, 16, 13, 25, 18, 1, 15, 7, 8, 22, 15, 0, 8, 19, 17, 8,
78 15, 16, 19, 16, 4, 5, 8, 21, 16, 1, 16, 21, 21, 27, 18, 10, 5,
79 14, 6, 5, 27, 31, 28, 5, 5, 11, 1, 8, 17, 2, 18, 8, 22, 28,
80 3, 12, 7, 9, 17, 13, 0, 10, 26, 28, 13, 14, 21, 16, 7, 11, 14,
81 28, 11, 28, 22, 8, 9, 29, 8, 28, 10, 12, 31, 27, 24, 20, 2, 23,
82 8, 13, 0, 23, 0, 19, 11, 4, 9, 8, 24, 8, 28
85 22, 12, 27, 14, 31, 21, 12, 21, 3, 0, 14, 5, 3, 28, 8, 9, 23,
86 30, 22, 8, 23, 16, 7, 16, 14, 7, 6, 2, 8, 15, 2, 3, 0, 6,
87 6, 11, 10, 0, 7, 7, 11, 28, 28, 21, 23, 16, 18, 17, 8, 23, 1,
88 29, 2, 17, 16, 17, 11, 13, 13, 3, 4, 20, 20, 15, 18, 0, 0, 27,
89 14, 11, 18, 10, 14, 6, 6, 25, 11, 18, 3, 5, 10, 2, 30, 24, 9,
90 13, 24, 18, 9, 31, 1, 19, 3, 2, 12, 30, 15, 21, 15, 23, 20, 26,
91 25, 17, 16, 13, 25, 18, 1, 15, 7, 8, 22, 15, 0, 8, 19, 17, 8,
92 15, 16, 19, 16, 4, 5, 8, 21, 16, 1, 16, 21, 21, 27, 18, 10, 5,
93 14, 6, 5, 27, 31, 28, 5, 5, 11, 1, 8, 17, 2, 18, 8, 22, 28,
94 3, 12, 7, 9, 17, 13, 0, 10, 26, 28, 13, 14, 21, 16, 7, 11, 14,
95 28, 11, 28, 22, 8, 9, 29, 8, 28, 10, 12, 31, 27, 24, 20, 2, 23,
96 8, 13, 0, 23, 0, 19, 11, 4, 9, 8, 24, 8
100 std::vector<int> Y1({-8, -7, -3, 1, 2, 3, 3, 5, 6, 6, 7, 9, 11, 25});
101 std::vector<float> Y2({-1.0, 1.0, 2.0});
102 std::vector<double> Y3({-3.6, -2.0, -1.0, 1.0, 2.0, 2.5, 2.88, 3.5, 7.1});
103 std::vector<int> Y4({
104 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2,
105 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5,
106 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,
107 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
108 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11,
109 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
110 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
111 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18,
112 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21,
113 21, 21, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24,
114 24, 25, 25, 25, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28,
115 28, 28, 28, 28, 29, 29, 30, 30, 30, 31, 31, 31, 31
117 std::vector<int> Y5({
118 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2,
119 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5,
120 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,
121 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
122 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11,
123 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
124 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
125 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18,
126 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21,
127 21, 21, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24,
128 24, 25, 25, 25, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28,
129 28, 28, 28, 28, 29, 29, 30, 30, 30, 31, 31, 31, 31
138 std::vector<double>::iterator,
146 std::vector<double>::iterator,
154 std::vector<double>::iterator,
162 std::vector<double>::iterator,
167 std::vector<int> Z1(X1);
169 if(Y1.size() != Z1.size())
return false;
170 if(!std::equal(Y1.begin(), Y1.end(), Z1.begin()))
return false;
171 std::vector<float> Z2(X2);
173 if(Y2.size() != Z2.size())
return false;
174 if(!std::equal(Y2.begin(), Y2.end(), Z2.begin()))
return false;
175 std::vector<double> Z3(X3);
177 if(Y3.size() != Z3.size())
return false;
178 if(!std::equal(Y3.begin(), Y3.end(), Z3.begin()))
return false;
179 std::vector<int> Z4(X4);
181 if(Y4.size() != Z4.size())
return false;
182 if(!std::equal(Y4.begin(), Y4.end(), Z4.begin()))
return false;
183 std::vector<int> Z5(X5);
185 if(Y5.size() != Z5.size())
return false;
186 if(!std::equal(Y5.begin(), Y5.end(), Z5.begin()))
return false;
189 Z1 = std::vector<int>(X1);
191 if(Y1.size() != Z1.size())
return false;
192 if(!std::equal(Y1.begin(), Y1.end(), Z1.begin()))
return false;
193 Z2 = std::vector<float>(X2);
195 if(Y2.size() != Z2.size())
return false;
196 if(!std::equal(Y2.begin(), Y2.end(), Z2.begin()))
return false;
197 Z3 = std::vector<double>(X3);
199 if(Y3.size() != Z3.size())
return false;
200 if(!std::equal(Y3.begin(), Y3.end(), Z3.begin()))
return false;
201 Z4 = std::vector<int>(X4);
203 if(Y4.size() != Z4.size())
return false;
204 if(!std::equal(Y4.begin(), Y4.end(), Z4.begin()))
return false;
205 Z5 = std::vector<int>(X5);
207 if(Y5.size() != Z5.size())
return false;
208 if(!std::equal(Y5.begin(), Y5.end(), Z5.begin()))
return false;
211 Z1 = std::vector<int>(X1);
213 if(Y1.size() != Z1.size())
return false;
214 if(!std::equal(Y1.begin(), Y1.end(), Z1.begin()))
return false;
215 Z2 = std::vector<float>(X2);
217 if(Y2.size() != Z2.size())
return false;
218 if(!std::equal(Y2.begin(), Y2.end(), Z2.begin()))
return false;
219 Z3 = std::vector<double>(X3);
221 if(Y3.size() != Z3.size())
return false;
222 if(!std::equal(Y3.begin(), Y3.end(), Z3.begin()))
return false;
223 Z4 = std::vector<int>(X4);
225 if(Y4.size() != Z4.size())
return false;
226 if(!std::equal(Y4.begin(), Y4.end(), Z4.begin()))
return false;
227 Z5 = std::vector<int>(X5);
229 if(Y5.size() != Z5.size())
return false;
230 if(!std::equal(Y5.begin(), Y5.end(), Z5.begin()))
return false;
233 Z1 = std::vector<int>(X1);
235 if(Y1.size() != Z1.size())
return false;
236 if(!std::equal(Y1.begin(), Y1.end(), Z1.begin()))
return false;
237 Z2 = std::vector<float>(X2);
239 if(Y2.size() != Z2.size())
return false;
240 if(!std::equal(Y2.begin(), Y2.end(), Z2.begin()))
return false;
241 Z3 = std::vector<double>(X3);
243 if(Y3.size() != Z3.size())
return false;
244 if(!std::equal(Y3.begin(), Y3.end(), Z3.begin()))
return false;
245 Z4 = std::vector<int>(X4);
247 if(Y4.size() != Z4.size())
return false;
248 if(!std::equal(Y4.begin(), Y4.end(), Z4.begin()))
return false;
249 Z5 = std::vector<int>(X5);
251 if(Y5.size() != Z5.size())
return false;
252 if(!std::equal(Y5.begin(), Y5.end(), Z5.begin()))
return false;
BaseTest class.
Definition: BaseTest.h:20
High performance computing components test.
Definition: HPCTest.h:16
HPCTest()
HPC test constructor.
Definition: HPCTest.h:26
Class providing a shared memory sorting algorithm based on merge sort.
Definition: SM_ParallelMergeSort.h:25
virtual void sort(RandomAccessIterator begin, RandomAccessIterator end, Comparator comparator)
Like SM_ParallelMergeSort::trySort function but it returns only after sorting has been finished....
Definition: SM_ParallelMergeSort.h:115