OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include <stdio.h> | 11 #include <stdio.h> |
12 #include <string.h> | 12 #include <string.h> |
13 | 13 |
14 #include <algorithm> | 14 #include <algorithm> |
15 | 15 |
| 16 #include "webrtc/base/timeutils.h" |
16 #include "webrtc/system_wrappers/include/sort.h" | 17 #include "webrtc/system_wrappers/include/sort.h" |
17 #include "webrtc/system_wrappers/include/tick_util.h" | |
18 | 18 |
19 // Excellent work polluting the global namespace Visual Studio... | 19 // Excellent work polluting the global namespace Visual Studio... |
20 #undef max | 20 #undef max |
21 #undef min | 21 #undef min |
22 #include <limits> | 22 #include <limits> |
23 | 23 |
24 template<typename KeyType> | 24 template<typename KeyType> |
25 struct LotsOfData | 25 struct LotsOfData |
26 { | 26 { |
27 KeyType key; | 27 KeyType key; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 | 137 |
138 if (keySort) | 138 if (keySort) |
139 { | 139 { |
140 printf("Running %s KeySort() tests...\n", TypeEnumToString(sortType)); | 140 printf("Running %s KeySort() tests...\n", TypeEnumToString(sortType)); |
141 } | 141 } |
142 else | 142 else |
143 { | 143 { |
144 printf("Running %s Sort() tests...\n", TypeEnumToString(sortType)); | 144 printf("Running %s Sort() tests...\n", TypeEnumToString(sortType)); |
145 } | 145 } |
146 | 146 |
147 TickInterval accTicks; | 147 int64_t accTicks; |
148 for (int i = 0; i < NumOfTests; i++) | 148 for (int i = 0; i < NumOfTests; i++) |
149 { | 149 { |
150 for (int j = 0; j < DataLength; j++) | 150 for (int j = 0; j < DataLength; j++) |
151 { | 151 { |
152 key[j] = TypedRand<KeyType>(); | 152 key[j] = TypedRand<KeyType>(); |
153 data[j].key = key[j]; | 153 data[j].key = key[j]; |
154 // Write index to payload. We use this later for verification. | 154 // Write index to payload. We use this later for verification. |
155 sprintf(data[j].data, "%d", j); | 155 sprintf(data[j].data, "%d", j); |
156 } | 156 } |
157 | 157 |
158 memcpy(dataRef, data, sizeof(data)); | 158 memcpy(dataRef, data, sizeof(data)); |
159 memcpy(keyRef, key, sizeof(key)); | 159 memcpy(keyRef, key, sizeof(key)); |
160 | 160 |
161 retVal = 0; | 161 retVal = 0; |
162 TickTime t0 = TickTime::Now(); | 162 int64_t t0 = rtc::TimeNanos(); |
163 if (keySort) | 163 if (keySort) |
164 { | 164 { |
165 retVal = webrtc::KeySort(data, key, DataLength, sizeof(LotsOfData<Ke
yType>), | 165 retVal = webrtc::KeySort(data, key, DataLength, sizeof(LotsOfData<Ke
yType>), |
166 sortType); | 166 sortType); |
167 | 167 |
168 //std::sort(data, data + DataLength, KeyLessThan<KeyType>()); | 168 //std::sort(data, data + DataLength, KeyLessThan<KeyType>()); |
169 //qsort(data, DataLength, sizeof(LotsOfData<KeyType>), | 169 //qsort(data, DataLength, sizeof(LotsOfData<KeyType>), |
170 // CompareKey<LotsOfData<KeyType>, KeyType>); | 170 // CompareKey<LotsOfData<KeyType>, KeyType>); |
171 } | 171 } |
172 else | 172 else |
173 { | 173 { |
174 retVal = webrtc::Sort(key, DataLength, sortType); | 174 retVal = webrtc::Sort(key, DataLength, sortType); |
175 | 175 |
176 //std::sort(key, key + DataLength); | 176 //std::sort(key, key + DataLength); |
177 //qsort(key, DataLength, sizeof(KeyType), Compare<KeyType>); | 177 //qsort(key, DataLength, sizeof(KeyType), Compare<KeyType>); |
178 } | 178 } |
179 TickTime t1 = TickTime::Now(); | 179 int64_t t1 = rtc::TimeNanos(); |
180 accTicks += (t1 - t0); | 180 accTicks += (t1 - t0); |
181 | 181 |
182 if (retVal != 0) | 182 if (retVal != 0) |
183 { | 183 { |
184 printf("Test failed at iteration %d:\n", i); | 184 printf("Test failed at iteration %d:\n", i); |
185 printf("Sort returned an error. "); | 185 printf("Sort returned an error. "); |
186 printf("It likely does not support the requested type\nExiting...\n"
); | 186 printf("It likely does not support the requested type\nExiting...\n"
); |
187 exit(0); | 187 exit(0); |
188 } | 188 } |
189 | 189 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 { | 229 { |
230 printf("Test failed at iteration %d:\n", i); | 230 printf("Test failed at iteration %d:\n", i); |
231 printf("Sort data differs from std::sort reference\nExiting...\n
"); | 231 printf("Sort data differs from std::sort reference\nExiting...\n
"); |
232 exit(0); | 232 exit(0); |
233 } | 233 } |
234 } | 234 } |
235 } | 235 } |
236 | 236 |
237 printf("Compliance test passed over %d iterations\n", NumOfTests); | 237 printf("Compliance test passed over %d iterations\n", NumOfTests); |
238 | 238 |
239 int64_t executeTime = accTicks.Milliseconds(); | 239 int64_t executeTime = accTicks / rtc::kNumNanosecsPerMillisec; |
240 printf("Execute time: %.2f s\n\n", (float)executeTime / 1000); | 240 printf("Execute time: %.2f s\n\n", (float)executeTime / 1000); |
241 } | 241 } |
242 | 242 |
243 int main() | 243 int main() |
244 { | 244 { |
245 // Seed rand(). | 245 // Seed rand(). |
246 srand(42); | 246 srand(42); |
247 bool keySort = false; | 247 bool keySort = false; |
248 for (int i = 0; i < 2; i++) { | 248 for (int i = 0; i < 2; i++) { |
249 RunSortTest<int8_t>(webrtc::TYPE_Word8, keySort); | 249 RunSortTest<int8_t>(webrtc::TYPE_Word8, keySort); |
250 RunSortTest<uint8_t>(webrtc::TYPE_UWord8, keySort); | 250 RunSortTest<uint8_t>(webrtc::TYPE_UWord8, keySort); |
251 RunSortTest<int16_t>(webrtc::TYPE_Word16, keySort); | 251 RunSortTest<int16_t>(webrtc::TYPE_Word16, keySort); |
252 RunSortTest<uint16_t>(webrtc::TYPE_UWord16, keySort); | 252 RunSortTest<uint16_t>(webrtc::TYPE_UWord16, keySort); |
253 RunSortTest<int32_t>(webrtc::TYPE_Word32, keySort); | 253 RunSortTest<int32_t>(webrtc::TYPE_Word32, keySort); |
254 RunSortTest<uint32_t>(webrtc::TYPE_UWord32, keySort); | 254 RunSortTest<uint32_t>(webrtc::TYPE_UWord32, keySort); |
255 RunSortTest<int64_t>(webrtc::TYPE_Word64, keySort); | 255 RunSortTest<int64_t>(webrtc::TYPE_Word64, keySort); |
256 RunSortTest<uint64_t>(webrtc::TYPE_UWord64, keySort); | 256 RunSortTest<uint64_t>(webrtc::TYPE_UWord64, keySort); |
257 RunSortTest<float>(webrtc::TYPE_Float32, keySort); | 257 RunSortTest<float>(webrtc::TYPE_Float32, keySort); |
258 RunSortTest<double>(webrtc::TYPE_Float64, keySort); | 258 RunSortTest<double>(webrtc::TYPE_Float64, keySort); |
259 | 259 |
260 keySort = !keySort; | 260 keySort = !keySort; |
261 } | 261 } |
262 | 262 |
263 printf("All tests passed\n"); | 263 printf("All tests passed\n"); |
264 | 264 |
265 return 0; | 265 return 0; |
266 } | 266 } |
OLD | NEW |