Changeset 10550 for trunk/psLib/test/math/tap_psStatsTiming.c
- Timestamp:
- Dec 8, 2006, 1:38:54 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/math/tap_psStatsTiming.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/math/tap_psStatsTiming.c
r10166 r10550 9 9 // ok(condition, "condition succeeded"); 10 10 // skip_start(condition, Nskip, "Skipping tests because of failure"); 11 12 # define DTIME(A,B) ((A.tv_sec - B.tv_sec) + 1e-6*(A.tv_usec - B.tv_usec)) 13 struct timeval start, mark; 11 14 12 15 int main (void) … … 22 25 rnd->data.F32[i] = psRandomGaussian (seed); 23 26 } 24 psTimerStart ("test"); 25 26 /********** fitted stats ***********/ 27 // test FITTED timing 28 { 29 // psMemId id = psMemGetId(); 30 31 diag ("check fitted mean speed : 1000 pts / 1000 loops"); 27 28 diag ("timing for sample mean"); 29 /********** SAMPLE MEAN ***********/ 30 // test stat sample mean (no mask, no range) 31 { 32 psMemId id = psMemGetId(); 33 34 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN); 35 36 gettimeofday (&start, NULL); 37 for (int i = 0; i < 10000; i++) 38 { 39 psVectorStats (stats, rnd, NULL, NULL, 0); 40 } 41 gettimeofday (&mark, NULL); 42 psF64 delta = DTIME(mark, start); 43 ok (delta < 0.1, "sample mean %f (mask: 0, range: 0): %.3f sec", stats->sampleMean, delta); 44 psFree (stats); 45 46 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 47 } 48 49 // test stat sample mean (mask, no range) 50 { 51 psMemId id = psMemGetId(); 52 53 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN); 54 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 55 psVectorInit (mask, 0); 56 mask->data.U8[100] = 1; 57 mask->data.U8[200] = 1; 58 mask->data.U8[300] = 1; 59 60 gettimeofday (&start, NULL); 61 for (int i = 0; i < 10000; i++) 62 { 63 psVectorStats (stats, rnd, NULL, mask, 1); 64 } 65 gettimeofday (&mark, NULL); 66 psF64 delta = DTIME(mark, start); 67 ok (delta < 0.12, "sample mean %f (mask: 1, range: 0): %.3f sec", stats->sampleMean, delta); 68 psFree (stats); 69 psFree (mask); 70 71 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 72 } 73 74 // test stat sample mean (no mask, range) 75 { 76 psMemId id = psMemGetId(); 77 78 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE); 79 stats->min = -10; 80 stats->max = +10; 81 82 gettimeofday (&start, NULL); 83 for (int i = 0; i < 10000; i++) 84 { 85 psVectorStats (stats, rnd, NULL, NULL, 0); 86 } 87 gettimeofday (&mark, NULL); 88 psF64 delta = DTIME(mark, start); 89 ok (delta < 0.18, "sample mean %f (mask: 0, range: 1): %.3f sec", stats->sampleMean, delta); 90 psFree (stats); 91 92 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 93 } 94 95 // test stat sample mean (mask, range) 96 { 97 psMemId id = psMemGetId(); 98 99 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE); 100 stats->min = -10; 101 stats->max = +10; 102 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 103 psVectorInit (mask, 0); 104 mask->data.U8[100] = 1; 105 mask->data.U8[200] = 1; 106 mask->data.U8[300] = 1; 107 108 gettimeofday (&start, NULL); 109 for (int i = 0; i < 10000; i++) 110 { 111 psVectorStats (stats, rnd, NULL, mask, 1); 112 } 113 gettimeofday (&mark, NULL); 114 psF64 delta = DTIME(mark, start); 115 ok (delta < 0.2, "sample mean %f (mask: 1, range: 1): %.3f sec", stats->sampleMean, delta); 116 psFree (stats); 117 psFree (mask); 118 119 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 120 } 121 122 diag ("timing for sample median"); 123 /********** SAMPLE MEDIAN ***********/ 124 // test stat sample median (no mask, no range) 125 { 126 psMemId id = psMemGetId(); 127 128 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN); 129 130 gettimeofday (&start, NULL); 131 for (int i = 0; i < 10000; i++) 132 { 133 psVectorStats (stats, rnd, NULL, NULL, 0); 134 } 135 gettimeofday (&mark, NULL); 136 psF64 delta = DTIME(mark, start); 137 ok (delta < 2.8, "sample median %f (mask: 0, range: 0): %.3f sec", stats->sampleMedian, delta); 138 psFree (stats); 139 140 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 141 } 142 143 // test stat sample median (mask, no range) 144 { 145 psMemId id = psMemGetId(); 146 147 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN); 148 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 149 psVectorInit (mask, 0); 150 mask->data.U8[100] = 1; 151 mask->data.U8[200] = 1; 152 mask->data.U8[300] = 1; 153 154 gettimeofday (&start, NULL); 155 for (int i = 0; i < 10000; i++) 156 { 157 psVectorStats (stats, rnd, NULL, mask, 1); 158 } 159 gettimeofday (&mark, NULL); 160 psF64 delta = DTIME(mark, start); 161 ok (delta < 2.8, "sample median %f (mask: 1, range: 0): %.3f sec", stats->sampleMedian, delta); 162 psFree (stats); 163 psFree (mask); 164 165 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 166 } 167 168 // test stat sample median (no mask, range) 169 { 170 psMemId id = psMemGetId(); 171 172 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_USE_RANGE); 173 stats->min = -10; 174 stats->max = +10; 175 176 gettimeofday (&start, NULL); 177 for (int i = 0; i < 10000; i++) 178 { 179 psVectorStats (stats, rnd, NULL, NULL, 0); 180 } 181 gettimeofday (&mark, NULL); 182 psF64 delta = DTIME(mark, start); 183 ok (delta < 2.8, "sample median %f (mask: 0, range: 1): %.3f sec", stats->sampleMedian, delta); 184 psFree (stats); 185 186 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 187 } 188 189 // test stat sample median (mask, range) 190 { 191 psMemId id = psMemGetId(); 192 193 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_USE_RANGE); 194 stats->min = -10; 195 stats->max = +10; 196 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 197 psVectorInit (mask, 0); 198 mask->data.U8[100] = 1; 199 mask->data.U8[200] = 1; 200 mask->data.U8[300] = 1; 201 202 gettimeofday (&start, NULL); 203 for (int i = 0; i < 10000; i++) 204 { 205 psVectorStats (stats, rnd, NULL, mask, 1); 206 } 207 gettimeofday (&mark, NULL); 208 psF64 delta = DTIME(mark, start); 209 ok (delta < 2.8, "sample median %f (mask: 1, range: 1): %.3f sec", stats->sampleMedian, delta); 210 psFree (stats); 211 psFree (mask); 212 213 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 214 } 215 216 diag ("timing for sample stdev"); 217 /********** SAMPLE STDEV ***********/ 218 // test stat sample stdev (no mask, no range) 219 { 220 psMemId id = psMemGetId(); 221 222 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_STDEV); 223 224 gettimeofday (&start, NULL); 225 for (int i = 0; i < 10000; i++) 226 { 227 psVectorStats (stats, rnd, NULL, NULL, 0); 228 } 229 gettimeofday (&mark, NULL); 230 psF64 delta = DTIME(mark, start); 231 ok (delta < 0.2, "sample stdev %f (mask: 0, range: 0): %.3f sec", stats->sampleStdev, delta); 232 psFree (stats); 233 234 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 235 } 236 237 // test stat sample stdev (mask, no range) 238 { 239 psMemId id = psMemGetId(); 240 241 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_STDEV); 242 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 243 psVectorInit (mask, 0); 244 mask->data.U8[100] = 1; 245 mask->data.U8[200] = 1; 246 mask->data.U8[300] = 1; 247 248 gettimeofday (&start, NULL); 249 for (int i = 0; i < 10000; i++) 250 { 251 psVectorStats (stats, rnd, NULL, mask, 1); 252 } 253 gettimeofday (&mark, NULL); 254 psF64 delta = DTIME(mark, start); 255 ok (delta < 0.27, "sample stdev %f (mask: 1, range: 0): %.3f sec", stats->sampleStdev, delta); 256 psFree (stats); 257 psFree (mask); 258 259 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 260 } 261 262 // test stat sample stdev (no mask, range) 263 { 264 psMemId id = psMemGetId(); 265 266 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_STDEV | PS_STAT_USE_RANGE); 267 stats->min = -10; 268 stats->max = +10; 269 270 gettimeofday (&start, NULL); 271 for (int i = 0; i < 10000; i++) 272 { 273 psVectorStats (stats, rnd, NULL, NULL, 0); 274 } 275 gettimeofday (&mark, NULL); 276 psF64 delta = DTIME(mark, start); 277 ok (delta < 0.36, "sample stdev %f (mask: 0, range: 1): %.3f sec", stats->sampleStdev, delta); 278 psFree (stats); 279 280 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 281 } 282 283 // test stat sample stdev (mask, range) 284 { 285 psMemId id = psMemGetId(); 286 287 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_STDEV | PS_STAT_USE_RANGE); 288 stats->min = -10; 289 stats->max = +10; 290 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 291 psVectorInit (mask, 0); 292 mask->data.U8[100] = 1; 293 mask->data.U8[200] = 1; 294 mask->data.U8[300] = 1; 295 296 gettimeofday (&start, NULL); 297 for (int i = 0; i < 10000; i++) 298 { 299 psVectorStats (stats, rnd, NULL, mask, 1); 300 } 301 gettimeofday (&mark, NULL); 302 psF64 delta = DTIME(mark, start); 303 ok (delta < 0.42, "sample stdev %f (mask: 1, range: 1): %.3f sec", stats->sampleStdev, delta); 304 psFree (stats); 305 psFree (mask); 306 307 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 308 } 309 310 diag ("timing for sample min,max"); 311 /*************** MIN,MAX ******************/ 312 // test stat min,max (no mask, no range) 313 { 314 psMemId id = psMemGetId(); 315 316 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX); 317 gettimeofday (&start, NULL); 318 for (int i = 0; i < 10000; i++) 319 { 320 psVectorStats (stats, rnd, NULL, NULL, 1); 321 } 322 gettimeofday (&mark, NULL); 323 psF64 delta = DTIME(mark, start); 324 ok (delta < 0.17, "sample min,max %f,%f (mask: 0, range: 0): %.3f sec", stats->min, stats->max, delta); 325 psFree (stats); 326 327 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 328 } 329 // test stat min,max (no mask, no range) 330 { 331 psMemId id = psMemGetId(); 332 333 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX); 334 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 335 psVectorInit (mask, 0); 336 mask->data.U8[100] = 1; 337 mask->data.U8[200] = 1; 338 mask->data.U8[300] = 1; 339 340 gettimeofday (&start, NULL); 341 for (int i = 0; i < 10000; i++) 342 { 343 psVectorStats (stats, rnd, NULL, mask, 1); 344 } 345 gettimeofday (&mark, NULL); 346 psF64 delta = DTIME(mark, start); 347 ok (delta < 0.18, "sample min,max %f,%f (mask: 1, range: 0): %.3f sec", stats->min, stats->max, delta); 348 psFree (stats); 349 psFree (mask); 350 351 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 352 } 353 // test stat min,max (no mask, no range) 354 { 355 psMemId id = psMemGetId(); 356 357 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX | PS_STAT_USE_RANGE); 358 stats->min = -10; 359 stats->max = +10; 360 361 gettimeofday (&start, NULL); 362 for (int i = 0; i < 10000; i++) 363 { 364 psVectorStats (stats, rnd, NULL, NULL, 1); 365 } 366 gettimeofday (&mark, NULL); 367 psF64 delta = DTIME(mark, start); 368 ok (delta < 0.22, "sample min,max %f,%f (mask: 0, range: 1): %.3f sec", stats->min, stats->max, delta); 369 psFree (stats); 370 371 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 372 } 373 // test stat min,max (no mask, no range) 374 { 375 psMemId id = psMemGetId(); 376 377 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX | PS_STAT_USE_RANGE); 378 stats->min = -10; 379 stats->max = +10; 380 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 381 psVectorInit (mask, 0); 382 mask->data.U8[100] = 1; 383 mask->data.U8[200] = 1; 384 mask->data.U8[300] = 1; 385 386 gettimeofday (&start, NULL); 387 for (int i = 0; i < 10000; i++) 388 { 389 psVectorStats (stats, rnd, NULL, mask, 1); 390 } 391 gettimeofday (&mark, NULL); 392 psF64 delta = DTIME(mark, start); 393 ok (delta < 0.26, "sample min,max %f,%f (mask: 1, range: 1): %.3f sec", stats->min, stats->max, delta); 394 psFree (stats); 395 psFree (mask); 396 397 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 398 } 399 400 diag ("timing for clipped stats"); 401 /********** CLIPPED STATS ***********/ 402 { 403 psMemId id = psMemGetId(); 404 405 psStats *stats = psStatsAlloc (PS_STAT_CLIPPED_MEAN | PS_STAT_CLIPPED_STDEV); 406 psVector *rnd2 = psVectorAlloc (1000, PS_TYPE_F32); 407 for (int i = 0; i < rnd2->n; i++) 408 { 409 rnd2->data.F32[i] = psRandomGaussian (seed); 410 } 411 412 gettimeofday (&start, NULL); 413 for (int i = 0; i < 1000; i++) 414 { 415 psVectorStats (stats, rnd2, NULL, NULL, 1); 416 } 417 gettimeofday (&mark, NULL); 418 psF64 delta = DTIME(mark, start); 419 ok (delta < 0.3, "clipped mean %f, stdev %f (mask: 0, range: 0): %.3f sec (1000 pts / 1000 loops)", stats->clippedMean, stats->clippedStdev, delta); 420 psFree (stats); 421 psFree (rnd2); 422 423 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 424 } 425 { 426 psMemId id = psMemGetId(); 427 428 psStats *stats = psStatsAlloc (PS_STAT_CLIPPED_MEAN | PS_STAT_CLIPPED_STDEV); 429 psVector *rnd2 = psVectorAlloc (3000, PS_TYPE_F32); 430 for (int i = 0; i < rnd2->n; i++) 431 { 432 rnd2->data.F32[i] = psRandomGaussian (seed); 433 } 434 435 gettimeofday (&start, NULL); 436 for (int i = 0; i < 1000; i++) 437 { 438 psVectorStats (stats, rnd2, NULL, NULL, 1); 439 } 440 gettimeofday (&mark, NULL); 441 psF64 delta = DTIME(mark, start); 442 ok (delta < 0.5, "clipped mean %f, stdev %f (mask: 0, range: 0): %.3f sec (3000 pts / 1000 loops)", stats->clippedMean, stats->clippedStdev, delta); 443 psFree (stats); 444 psFree (rnd2); 445 446 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 447 } 448 { 449 psMemId id = psMemGetId(); 450 451 psStats *stats = psStatsAlloc (PS_STAT_CLIPPED_MEAN | PS_STAT_CLIPPED_STDEV); 452 psVector *rnd2 = psVectorAlloc (10000, PS_TYPE_F32); 453 for (int i = 0; i < rnd2->n; i++) 454 { 455 rnd2->data.F32[i] = psRandomGaussian (seed); 456 } 457 458 gettimeofday (&start, NULL); 459 for (int i = 0; i < 1000; i++) 460 { 461 psVectorStats (stats, rnd2, NULL, NULL, 1); 462 } 463 gettimeofday (&mark, NULL); 464 psF64 delta = DTIME(mark, start); 465 ok (delta < 1.2, "clipped mean %f, stdev %f (mask: 0, range: 0): %.3f sec (10000 pts / 1000 loops)", stats->clippedMean, stats->clippedStdev, delta); 466 psFree (stats); 467 psFree (rnd2); 468 469 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 470 } 471 472 diag ("timing for robust stats"); 473 /********** ROBUST STATS ***********/ 474 { 475 psMemId id = psMemGetId(); 476 477 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_ROBUST_QUARTILE); 478 psVector *rnd2 = psVectorAlloc (1000, PS_TYPE_F32); 479 for (int i = 0; i < rnd2->n; i++) 480 { 481 rnd2->data.F32[i] = psRandomGaussian (seed); 482 } 483 484 gettimeofday (&start, NULL); 485 for (int i = 0; i < 1000; i++) 486 { 487 psVectorStats (stats, rnd2, NULL, NULL, 1); 488 } 489 gettimeofday (&mark, NULL); 490 psF64 delta = DTIME(mark, start); 491 ok (delta < 0.3, "robust mean %f, stdev %f (mask: 0, range: 0): %.3f sec (1000 pts / 1000 loops)", stats->robustMedian, stats->robustStdev, delta); 492 psFree (stats); 493 psFree (rnd2); 494 495 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 496 } 497 { 498 psMemId id = psMemGetId(); 499 500 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_ROBUST_QUARTILE); 501 psVector *rnd2 = psVectorAlloc (3000, PS_TYPE_F32); 502 for (int i = 0; i < rnd2->n; i++) 503 { 504 rnd2->data.F32[i] = psRandomGaussian (seed); 505 } 506 507 gettimeofday (&start, NULL); 508 for (int i = 0; i < 1000; i++) 509 { 510 psVectorStats (stats, rnd2, NULL, NULL, 1); 511 } 512 gettimeofday (&mark, NULL); 513 psF64 delta = DTIME(mark, start); 514 ok (delta < 0.5, "robust mean %f, stdev %f (mask: 0, range: 0): %.3f sec (3000 pts / 1000 loops)", stats->robustMedian, stats->robustStdev, delta); 515 psFree (stats); 516 psFree (rnd2); 517 518 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 519 } 520 { 521 psMemId id = psMemGetId(); 522 523 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_ROBUST_QUARTILE); 524 psVector *rnd2 = psVectorAlloc (10000, PS_TYPE_F32); 525 for (int i = 0; i < rnd2->n; i++) 526 { 527 rnd2->data.F32[i] = psRandomGaussian (seed); 528 } 529 530 gettimeofday (&start, NULL); 531 for (int i = 0; i < 1000; i++) 532 { 533 psVectorStats (stats, rnd2, NULL, NULL, 1); 534 } 535 gettimeofday (&mark, NULL); 536 psF64 delta = DTIME(mark, start); 537 ok (delta < 1.2, "robust mean %f, stdev %f (mask: 0, range: 0): %.3f sec (10000 pts / 1000 loops)", stats->robustMedian, stats->robustStdev, delta); 538 psFree (stats); 539 psFree (rnd2); 540 541 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 542 } 543 544 diag ("timing for fitted stats"); 545 /********** FITTED TIMING ***********/ 546 { 547 psMemId id = psMemGetId(); 32 548 33 549 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV); … … 38 554 } 39 555 40 psTimerClear ("test");41 for (int i = 0; i < 1000; i++) 42 { 43 psVectorStats (stats, rnd2, NULL, NULL, 1); 44 } 45 psF64 delta = psTimerMark("test");46 ok (delta < 0.5, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec", stats->fittedMean, stats->fittedStdev, delta);47 psF ree (stats);48 49 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");50 }51 // test FITTED timing 52 {53 // psMemId id = psMemGetId();54 55 diag ("check fitted mean speed : 3000 pts / 1000 loops");556 gettimeofday (&start, NULL); 557 for (int i = 0; i < 1000; i++) 558 { 559 psVectorStats (stats, rnd2, NULL, NULL, 1); 560 561 } 562 gettimeofday (&mark, NULL); 563 psF64 delta = DTIME(mark, start); 564 ok (delta < 0.7, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec (1000 pts / 1000 loops)", stats->fittedMean, stats->fittedStdev, delta); 565 psFree (stats); 566 psFree (rnd2); 567 568 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 569 } 570 { 571 psMemId id = psMemGetId(); 56 572 57 573 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV); … … 62 578 } 63 579 64 psTimerClear ("test"); 65 for (int i = 0; i < 1000; i++) 66 { 67 psVectorStats (stats, rnd2, NULL, NULL, 1); 68 } 69 psF64 delta = psTimerMark("test"); 70 ok (delta < 0.8, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec", stats->fittedMean, stats->fittedStdev, delta); 71 psFree (stats); 72 73 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 74 } 75 // test FITTED timing 76 { 77 // psMemId id = psMemGetId(); 78 79 diag ("check fitted mean speed : 10000 pts / 1000 loops"); 580 gettimeofday (&start, NULL); 581 for (int i = 0; i < 1000; i++) 582 { 583 psVectorStats (stats, rnd2, NULL, NULL, 1); 584 } 585 gettimeofday (&mark, NULL); 586 psF64 delta = DTIME(mark, start); 587 ok (delta < 0.8, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec (3000 pts / 1000 loops)", stats->fittedMean, stats->fittedStdev, delta); 588 psFree (stats); 589 psFree (rnd2); 590 591 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 592 } 593 { 594 psMemId id = psMemGetId(); 80 595 81 596 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV); … … 86 601 } 87 602 88 psTimerClear ("test"); 89 for (int i = 0; i < 1000; i++) 90 { 91 psVectorStats (stats, rnd2, NULL, NULL, 1); 92 } 93 psF64 delta = psTimerMark("test"); 94 ok (delta < 2.2, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec", stats->fittedMean, stats->fittedStdev, delta); 95 psFree (stats); 96 97 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 98 } 99 // test stat min,max (no mask, no range) 100 { 101 // psMemId id = psMemGetId(); 102 103 diag ("check fitted mean speed (and value)"); 104 105 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV | PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 106 psVector *sample = psVectorAlloc (1000, PS_TYPE_F32); 107 psVector *fitted = psVectorAlloc (1000, PS_TYPE_F32); 108 109 for (int i = 0; i < 1000; i++) 110 { 111 // generate a new sample 112 for (int j = 0; j < rnd->n; j++) { 113 rnd->data.F32[j] = psRandomGaussian (seed); 114 } 115 // measure the stats 116 psVectorStats (stats, rnd, NULL, NULL, 1); 117 sample->data.F32[i] = stats->sampleMean; 118 fitted->data.F32[i] = stats->fittedMean; 119 } 120 psFree (stats); 121 122 stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 123 psVectorStats (stats, sample, NULL, NULL, 1); 124 ok (stats->sampleStdev < 2/sqrt(1000), "sample mean %f, stdev %f", stats->sampleMean, stats->sampleStdev); 125 psVectorStats (stats, fitted, NULL, NULL, 1); 126 ok (stats->sampleStdev < 2/sqrt(1000), "fitted mean %f, stdev %f", stats->sampleMean, stats->sampleStdev); 127 psFree (stats); 128 129 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 130 } 131 132 /********** robust stats ***********/ 133 // test ROBUST timing 134 { 135 // psMemId id = psMemGetId(); 136 137 diag ("check robust mean speed : 1000 pts / 1000 loops"); 138 139 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_ROBUST_QUARTILE); 603 gettimeofday (&start, NULL); 604 for (int i = 0; i < 1000; i++) 605 { 606 psVectorStats (stats, rnd2, NULL, NULL, 1); 607 } 608 gettimeofday (&mark, NULL); 609 psF64 delta = DTIME(mark, start); 610 ok (delta < 2.2, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec (10000 pts / 1000 loops)", stats->fittedMean, stats->fittedStdev, delta); 611 psFree (stats); 612 psFree (rnd2); 613 614 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 615 } 616 617 diag ("timing for fitted (v2) stats"); 618 /********** FITTED (v2) TIMING ***********/ 619 { 620 psMemId id = psMemGetId(); 621 622 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN_V2 | PS_STAT_FITTED_STDEV_V2); 140 623 psVector *rnd2 = psVectorAlloc (1000, PS_TYPE_F32); 141 624 for (int i = 0; i < rnd2->n; i++) … … 144 627 } 145 628 146 psTimerClear ("test");147 for (int i = 0; i < 1000; i++) 148 { 149 psVectorStats (stats, rnd2, NULL, NULL, 1); 150 } 151 psF64 delta = psTimerMark("test");152 ok (delta < 0.2, "robust mean %f, stdev %f (mask: 0, range: 0): %.3f sec", stats->robustMedian, stats->robustStdev, delta);153 psF ree (stats);154 155 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");156 }157 // test ROBUST timing 158 {159 // psMemId id = psMemGetId();160 161 diag ("check robust mean speed : 3000 pts / 1000 loops");162 163 psStats *stats = psStatsAlloc (PS_STAT_ ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_ROBUST_QUARTILE);629 gettimeofday (&start, NULL); 630 for (int i = 0; i < 1000; i++) 631 { 632 psVectorStats (stats, rnd2, NULL, NULL, 1); 633 634 } 635 gettimeofday (&mark, NULL); 636 psF64 delta = DTIME(mark, start); 637 ok (delta < 0.7, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec (1000 pts / 1000 loops)", stats->fittedMean, stats->fittedStdev, delta); 638 psFree (stats); 639 psFree (rnd2); 640 641 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 642 } 643 { 644 psMemId id = psMemGetId(); 645 646 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN_V2 | PS_STAT_FITTED_STDEV_V2); 164 647 psVector *rnd2 = psVectorAlloc (3000, PS_TYPE_F32); 165 648 for (int i = 0; i < rnd2->n; i++) … … 168 651 } 169 652 170 psTimerClear ("test"); 171 for (int i = 0; i < 1000; i++) 172 { 173 psVectorStats (stats, rnd2, NULL, NULL, 1); 174 } 175 psF64 delta = psTimerMark("test"); 176 ok (delta < 0.5, "robust mean %f, stdev %f (mask: 0, range: 0): %.3f sec", stats->robustMedian, stats->robustStdev, delta); 177 psFree (stats); 178 179 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 180 } 181 // test ROBUST timing 182 { 183 // psMemId id = psMemGetId(); 184 185 diag ("check robust mean speed : 10000 pts / 1000 loops"); 186 187 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_ROBUST_QUARTILE); 653 gettimeofday (&start, NULL); 654 for (int i = 0; i < 1000; i++) 655 { 656 psVectorStats (stats, rnd2, NULL, NULL, 1); 657 } 658 gettimeofday (&mark, NULL); 659 psF64 delta = DTIME(mark, start); 660 ok (delta < 0.8, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec (3000 pts / 1000 loops)", stats->fittedMean, stats->fittedStdev, delta); 661 psFree (stats); 662 psFree (rnd2); 663 664 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 665 } 666 { 667 psMemId id = psMemGetId(); 668 669 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN_V2 | PS_STAT_FITTED_STDEV_V2); 188 670 psVector *rnd2 = psVectorAlloc (10000, PS_TYPE_F32); 189 671 for (int i = 0; i < rnd2->n; i++) … … 192 674 } 193 675 194 psTimerClear ("test"); 195 for (int i = 0; i < 1000; i++) 196 { 197 psVectorStats (stats, rnd2, NULL, NULL, 1); 198 } 199 psF64 delta = psTimerMark("test"); 200 ok (delta < 1.2, "robust mean %f, stdev %f (mask: 0, range: 0): %.3f sec", stats->robustMedian, stats->robustStdev, delta); 201 psFree (stats); 202 203 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 204 } 205 // test stat min,max (no mask, no range) 206 { 207 // psMemId id = psMemGetId(); 208 209 diag ("check robust mean speed (and value)"); 210 211 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 676 gettimeofday (&start, NULL); 677 for (int i = 0; i < 1000; i++) 678 { 679 psVectorStats (stats, rnd2, NULL, NULL, 1); 680 } 681 gettimeofday (&mark, NULL); 682 psF64 delta = DTIME(mark, start); 683 ok (delta < 2.2, "fitted mean %f, stdev %f (mask: 0, range: 0): %.3f sec (10000 pts / 1000 loops)", stats->fittedMean, stats->fittedStdev, delta); 684 psFree (stats); 685 psFree (rnd2); 686 687 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 688 } 689 690 diag ("compare sample, robust, and fitted mean and stdev to theoretical"); 691 // compare SAMPLE, FITTED, ROBUST mean to theoretical 692 { 693 psMemId id = psMemGetId(); 694 695 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV | PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV); 212 696 psVector *sample = psVectorAlloc (1000, PS_TYPE_F32); 213 697 psVector *robust = psVectorAlloc (1000, PS_TYPE_F32); 698 psVector *fitted = psVectorAlloc (1000, PS_TYPE_F32); 214 699 215 700 for (int i = 0; i < 1000; i++) … … 223 708 sample->data.F32[i] = stats->sampleMean; 224 709 robust->data.F32[i] = stats->robustMedian; 710 fitted->data.F32[i] = stats->fittedMean; 225 711 } 226 712 psFree (stats); … … 228 714 stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 229 715 psVectorStats (stats, sample, NULL, NULL, 1); 230 ok (stats->sampleStdev < 2/sqrt(1000), "sample mean %f, stdev %f ", stats->sampleMean, stats->sampleStdev);716 ok (stats->sampleStdev < 2/sqrt(1000), "sample mean %f, stdev %f (1000 tries)", stats->sampleMean, stats->sampleStdev); 231 717 psVectorStats (stats, robust, NULL, NULL, 1); 232 ok (stats->sampleStdev < 2/sqrt(1000), "robust mean %f, stdev %f", stats->sampleMean, stats->sampleStdev); 233 psFree (stats); 234 235 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 236 } 237 238 /********** stats ***********/ 239 // test stat sample mean (no mask, no range) 240 { 241 // psMemId id = psMemGetId(); 242 243 diag ("check sample mean speed (and value)"); 244 245 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN); 246 247 psTimerClear ("test"); 248 for (int i = 0; i < 10000; i++) 249 { 250 psVectorStats (stats, rnd, NULL, NULL, 0); 251 } 252 psF64 delta = psTimerMark("test"); 253 ok (delta < 0.1, "sample mean %f (mask: 0, range: 0): %.3f sec", stats->sampleMean, delta); 254 psFree (stats); 255 256 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 257 } 258 259 // test stat sample mean (mask, no range) 260 { 261 // psMemId id = psMemGetId(); 262 263 diag ("check sample mean speed (and value)"); 264 265 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN); 266 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 267 psVectorInit (mask, 0); 268 mask->data.U8[100] = 1; 269 mask->data.U8[200] = 1; 270 mask->data.U8[300] = 1; 271 272 psTimerClear ("test"); 273 for (int i = 0; i < 10000; i++) 274 { 275 psVectorStats (stats, rnd, NULL, mask, 1); 276 } 277 psF64 delta = psTimerMark("test"); 278 ok (delta < 0.12, "sample mean %f (mask: 1, range: 0): %.3f sec", stats->sampleMean, delta); 279 psFree (stats); 280 281 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 282 } 283 284 // test stat sample mean (no mask, range) 285 { 286 // psMemId id = psMemGetId(); 287 288 diag ("check sample mean speed (and value)"); 289 290 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE); 291 stats->min = -10; 292 stats->max = +10; 293 294 psTimerClear ("test"); 295 for (int i = 0; i < 10000; i++) 296 { 297 psVectorStats (stats, rnd, NULL, NULL, 0); 298 } 299 psF64 delta = psTimerMark("test"); 300 ok (delta < 0.18, "sample mean %f (mask: 0, range: 1): %.3f sec", stats->sampleMean, delta); 301 psFree (stats); 302 303 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 304 } 305 306 // test stat sample mean (mask, range) 307 { 308 // psMemId id = psMemGetId(); 309 310 diag ("check sample mean speed (and value)"); 311 312 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE); 313 stats->min = -10; 314 stats->max = +10; 315 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 316 psVectorInit (mask, 0); 317 mask->data.U8[100] = 1; 318 mask->data.U8[200] = 1; 319 mask->data.U8[300] = 1; 320 321 psTimerClear ("test"); 322 for (int i = 0; i < 10000; i++) 323 { 324 psVectorStats (stats, rnd, NULL, mask, 1); 325 } 326 psF64 delta = psTimerMark("test"); 327 ok (delta < 0.2, "sample mean %f (mask: 1, range: 1): %.3f sec", stats->sampleMean, delta); 328 psFree (stats); 329 330 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 331 } 332 333 /*************** min,max ******************/ 334 // test stat min,max (no mask, no range) 335 { 336 // psMemId id = psMemGetId(); 337 338 diag ("check min,max speed (no mask, no range)"); 339 340 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX); 341 psTimerClear ("test"); 342 for (int i = 0; i < 10000; i++) 343 { 718 ok (stats->sampleStdev < 2/sqrt(1000), "robust mean %f, stdev %f (1000 tries)", stats->sampleMean, stats->sampleStdev); 719 psVectorStats (stats, fitted, NULL, NULL, 1); 720 ok (stats->sampleStdev < 2/sqrt(1000), "fitted mean %f, stdev %f (1000 tries)", stats->sampleMean, stats->sampleStdev); 721 psFree (stats); 722 psFree (sample); 723 psFree (robust); 724 psFree (fitted); 725 726 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 727 } 728 729 diag ("compare sample, robust, and fitted mean and stdev to theoretical"); 730 // compare SAMPLE, FITTED_V2, ROBUST mean to theoretical 731 { 732 psMemId id = psMemGetId(); 733 734 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV | PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | PS_STAT_FITTED_MEAN_V2 | PS_STAT_FITTED_STDEV_V2); 735 psVector *sample = psVectorAlloc (1000, PS_TYPE_F32); 736 psVector *robust = psVectorAlloc (1000, PS_TYPE_F32); 737 psVector *fitted = psVectorAlloc (1000, PS_TYPE_F32); 738 739 for (int i = 0; i < 1000; i++) 740 { 741 // generate a new sample 742 for (int j = 0; j < rnd->n; j++) { 743 rnd->data.F32[j] = psRandomGaussian (seed); 744 } 745 // measure the stats 344 746 psVectorStats (stats, rnd, NULL, NULL, 1); 345 } 346 psF64 delta = psTimerMark("test"); 347 ok (delta < 0.17, "sample min,max %f,%f (mask: 0, range: 0): %.3f sec", stats->min, stats->max, delta); 348 psFree (stats); 349 350 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 351 } 352 // test stat min,max (no mask, no range) 353 { 354 // psMemId id = psMemGetId(); 355 356 diag ("check min,max speed (mask, no range)"); 357 358 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX); 359 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 360 psVectorInit (mask, 0); 361 mask->data.U8[100] = 1; 362 mask->data.U8[200] = 1; 363 mask->data.U8[300] = 1; 364 365 psTimerClear ("test"); 366 for (int i = 0; i < 10000; i++) 367 { 368 psVectorStats (stats, rnd, NULL, mask, 1); 369 } 370 psF64 delta = psTimerMark("test"); 371 ok (delta < 0.18, "sample min,max %f,%f (mask: 1, range: 0): %.3f sec", stats->min, stats->max, delta); 372 psFree (stats); 373 374 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 375 } 376 // test stat min,max (no mask, no range) 377 { 378 // psMemId id = psMemGetId(); 379 380 diag ("check min,max speed (no mask, range)"); 381 382 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX | PS_STAT_USE_RANGE); 383 stats->min = -10; 384 stats->max = +10; 385 386 psTimerClear ("test"); 387 for (int i = 0; i < 10000; i++) 388 { 389 psVectorStats (stats, rnd, NULL, NULL, 1); 390 } 391 psF64 delta = psTimerMark("test"); 392 ok (delta < 0.22, "sample min,max %f,%f (mask: 0, range: 1): %.3f sec", stats->min, stats->max, delta); 393 psFree (stats); 394 395 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 396 } 397 // test stat min,max (no mask, no range) 398 { 399 // psMemId id = psMemGetId(); 400 401 diag ("check min,max speed (mask, range)"); 402 403 psStats *stats = psStatsAlloc (PS_STAT_MIN | PS_STAT_MAX | PS_STAT_USE_RANGE); 404 stats->min = -10; 405 stats->max = +10; 406 psVector *mask = psVectorAlloc (1000, PS_TYPE_U8); 407 psVectorInit (mask, 0); 408 mask->data.U8[100] = 1; 409 mask->data.U8[200] = 1; 410 mask->data.U8[300] = 1; 411 412 psTimerClear ("test"); 413 for (int i = 0; i < 10000; i++) 414 { 415 psVectorStats (stats, rnd, NULL, mask, 1); 416 } 417 psF64 delta = psTimerMark("test"); 418 ok (delta < 0.26, "sample min,max %f,%f (mask: 1, range: 1): %.3f sec", stats->min, stats->max, delta); 419 psFree (stats); 420 421 // ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 747 sample->data.F32[i] = stats->sampleMean; 748 robust->data.F32[i] = stats->robustMedian; 749 fitted->data.F32[i] = stats->fittedMean; 750 } 751 psFree (stats); 752 753 stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 754 psVectorStats (stats, sample, NULL, NULL, 1); 755 ok (stats->sampleStdev < 2/sqrt(1000), "sample mean %f, stdev %f (1000 tries)", stats->sampleMean, stats->sampleStdev); 756 psVectorStats (stats, robust, NULL, NULL, 1); 757 ok (stats->sampleStdev < 2/sqrt(1000), "robust mean %f, stdev %f (1000 tries)", stats->sampleMean, stats->sampleStdev); 758 psVectorStats (stats, fitted, NULL, NULL, 1); 759 ok (stats->sampleStdev < 2/sqrt(1000), "fitted mean %f, stdev %f (1000 tries)", stats->sampleMean, stats->sampleStdev); 760 psFree (stats); 761 psFree (sample); 762 psFree (robust); 763 psFree (fitted); 764 765 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 422 766 } 423 767
Note:
See TracChangeset
for help on using the changeset viewer.
