]> git.proxmox.com Git - rustc.git/blame - src/libtest/stats/tests.rs
New upstream version 1.44.1+dfsg1
[rustc.git] / src / libtest / stats / tests.rs
CommitLineData
416331ca
XL
1use super::*;
2
3extern crate test;
dfeec247 4use self::test::test::Bencher;
dc9dc135 5use std::io;
dfeec247 6use std::io::prelude::*;
416331ca
XL
7
8// Test vectors generated from R, using the script src/etc/stat-test-vectors.r.
dc9dc135
XL
9
10macro_rules! assert_approx_eq {
11 ($a: expr, $b: expr) => {{
12 let (a, b) = (&$a, &$b);
dfeec247 13 assert!((*a - *b).abs() < 1.0e-6, "{} is not approximately equal to {}", *a, *b);
dc9dc135
XL
14 }};
15}
16
17fn check(samples: &[f64], summ: &Summary) {
18 let summ2 = Summary::new(samples);
19
20 let mut w = io::sink();
21 let w = &mut w;
22 (write!(w, "\n")).unwrap();
23
24 assert_eq!(summ.sum, summ2.sum);
25 assert_eq!(summ.min, summ2.min);
26 assert_eq!(summ.max, summ2.max);
27 assert_eq!(summ.mean, summ2.mean);
28 assert_eq!(summ.median, summ2.median);
29
30 // We needed a few more digits to get exact equality on these
31 // but they're within float epsilon, which is 1.0e-6.
32 assert_approx_eq!(summ.var, summ2.var);
33 assert_approx_eq!(summ.std_dev, summ2.std_dev);
34 assert_approx_eq!(summ.std_dev_pct, summ2.std_dev_pct);
35 assert_approx_eq!(summ.median_abs_dev, summ2.median_abs_dev);
36 assert_approx_eq!(summ.median_abs_dev_pct, summ2.median_abs_dev_pct);
37
38 assert_eq!(summ.quartiles, summ2.quartiles);
39 assert_eq!(summ.iqr, summ2.iqr);
40}
41
42#[test]
43fn test_min_max_nan() {
44 let xs = &[1.0, 2.0, f64::NAN, 3.0, 4.0];
45 let summary = Summary::new(xs);
46 assert_eq!(summary.min, 1.0);
47 assert_eq!(summary.max, 4.0);
48}
49
50#[test]
51fn test_norm2() {
52 let val = &[958.0000000000, 924.0000000000];
53 let summ = &Summary {
54 sum: 1882.0000000000,
55 min: 924.0000000000,
56 max: 958.0000000000,
57 mean: 941.0000000000,
58 median: 941.0000000000,
59 var: 578.0000000000,
60 std_dev: 24.0416305603,
61 std_dev_pct: 2.5549022912,
62 median_abs_dev: 25.2042000000,
63 median_abs_dev_pct: 2.6784484591,
64 quartiles: (932.5000000000, 941.0000000000, 949.5000000000),
65 iqr: 17.0000000000,
66 };
67 check(val, summ);
68}
69#[test]
70fn test_norm10narrow() {
71 let val = &[
72 966.0000000000,
73 985.0000000000,
74 1110.0000000000,
75 848.0000000000,
76 821.0000000000,
77 975.0000000000,
78 962.0000000000,
79 1157.0000000000,
80 1217.0000000000,
81 955.0000000000,
82 ];
83 let summ = &Summary {
84 sum: 9996.0000000000,
85 min: 821.0000000000,
86 max: 1217.0000000000,
87 mean: 999.6000000000,
88 median: 970.5000000000,
89 var: 16050.7111111111,
90 std_dev: 126.6914010938,
91 std_dev_pct: 12.6742097933,
92 median_abs_dev: 102.2994000000,
93 median_abs_dev_pct: 10.5408964451,
94 quartiles: (956.7500000000, 970.5000000000, 1078.7500000000),
95 iqr: 122.0000000000,
96 };
97 check(val, summ);
98}
99#[test]
100fn test_norm10medium() {
101 let val = &[
102 954.0000000000,
103 1064.0000000000,
104 855.0000000000,
105 1000.0000000000,
106 743.0000000000,
107 1084.0000000000,
108 704.0000000000,
109 1023.0000000000,
110 357.0000000000,
111 869.0000000000,
112 ];
113 let summ = &Summary {
114 sum: 8653.0000000000,
115 min: 357.0000000000,
116 max: 1084.0000000000,
117 mean: 865.3000000000,
118 median: 911.5000000000,
119 var: 48628.4555555556,
120 std_dev: 220.5186059170,
121 std_dev_pct: 25.4846418487,
122 median_abs_dev: 195.7032000000,
123 median_abs_dev_pct: 21.4704552935,
124 quartiles: (771.0000000000, 911.5000000000, 1017.2500000000),
125 iqr: 246.2500000000,
126 };
127 check(val, summ);
128}
129#[test]
130fn test_norm10wide() {
131 let val = &[
132 505.0000000000,
133 497.0000000000,
134 1591.0000000000,
135 887.0000000000,
136 1026.0000000000,
137 136.0000000000,
138 1580.0000000000,
139 940.0000000000,
140 754.0000000000,
141 1433.0000000000,
142 ];
143 let summ = &Summary {
144 sum: 9349.0000000000,
145 min: 136.0000000000,
146 max: 1591.0000000000,
147 mean: 934.9000000000,
148 median: 913.5000000000,
149 var: 239208.9888888889,
150 std_dev: 489.0899599142,
151 std_dev_pct: 52.3146817750,
152 median_abs_dev: 611.5725000000,
153 median_abs_dev_pct: 66.9482758621,
154 quartiles: (567.2500000000, 913.5000000000, 1331.2500000000),
155 iqr: 764.0000000000,
156 };
157 check(val, summ);
158}
159#[test]
160fn test_norm25verynarrow() {
161 let val = &[
162 991.0000000000,
163 1018.0000000000,
164 998.0000000000,
165 1013.0000000000,
166 974.0000000000,
167 1007.0000000000,
168 1014.0000000000,
169 999.0000000000,
170 1011.0000000000,
171 978.0000000000,
172 985.0000000000,
173 999.0000000000,
174 983.0000000000,
175 982.0000000000,
176 1015.0000000000,
177 1002.0000000000,
178 977.0000000000,
179 948.0000000000,
180 1040.0000000000,
181 974.0000000000,
182 996.0000000000,
183 989.0000000000,
184 1015.0000000000,
185 994.0000000000,
186 1024.0000000000,
187 ];
188 let summ = &Summary {
189 sum: 24926.0000000000,
190 min: 948.0000000000,
191 max: 1040.0000000000,
192 mean: 997.0400000000,
193 median: 998.0000000000,
194 var: 393.2066666667,
195 std_dev: 19.8294393937,
196 std_dev_pct: 1.9888308788,
197 median_abs_dev: 22.2390000000,
198 median_abs_dev_pct: 2.2283567134,
199 quartiles: (983.0000000000, 998.0000000000, 1013.0000000000),
200 iqr: 30.0000000000,
201 };
202 check(val, summ);
203}
204#[test]
205fn test_exp10a() {
206 let val = &[
207 23.0000000000,
208 11.0000000000,
209 2.0000000000,
210 57.0000000000,
211 4.0000000000,
212 12.0000000000,
213 5.0000000000,
214 29.0000000000,
215 3.0000000000,
216 21.0000000000,
217 ];
218 let summ = &Summary {
219 sum: 167.0000000000,
220 min: 2.0000000000,
221 max: 57.0000000000,
222 mean: 16.7000000000,
223 median: 11.5000000000,
224 var: 287.7888888889,
225 std_dev: 16.9643416875,
226 std_dev_pct: 101.5828843560,
227 median_abs_dev: 13.3434000000,
228 median_abs_dev_pct: 116.0295652174,
229 quartiles: (4.2500000000, 11.5000000000, 22.5000000000),
230 iqr: 18.2500000000,
231 };
232 check(val, summ);
233}
234#[test]
235fn test_exp10b() {
236 let val = &[
237 24.0000000000,
238 17.0000000000,
239 6.0000000000,
240 38.0000000000,
241 25.0000000000,
242 7.0000000000,
243 51.0000000000,
244 2.0000000000,
245 61.0000000000,
246 32.0000000000,
247 ];
248 let summ = &Summary {
249 sum: 263.0000000000,
250 min: 2.0000000000,
251 max: 61.0000000000,
252 mean: 26.3000000000,
253 median: 24.5000000000,
254 var: 383.5666666667,
255 std_dev: 19.5848580967,
256 std_dev_pct: 74.4671410520,
257 median_abs_dev: 22.9803000000,
258 median_abs_dev_pct: 93.7971428571,
259 quartiles: (9.5000000000, 24.5000000000, 36.5000000000),
260 iqr: 27.0000000000,
261 };
262 check(val, summ);
263}
264#[test]
265fn test_exp10c() {
266 let val = &[
267 71.0000000000,
268 2.0000000000,
269 32.0000000000,
270 1.0000000000,
271 6.0000000000,
272 28.0000000000,
273 13.0000000000,
274 37.0000000000,
275 16.0000000000,
276 36.0000000000,
277 ];
278 let summ = &Summary {
279 sum: 242.0000000000,
280 min: 1.0000000000,
281 max: 71.0000000000,
282 mean: 24.2000000000,
283 median: 22.0000000000,
284 var: 458.1777777778,
285 std_dev: 21.4050876611,
286 std_dev_pct: 88.4507754589,
287 median_abs_dev: 21.4977000000,
288 median_abs_dev_pct: 97.7168181818,
289 quartiles: (7.7500000000, 22.0000000000, 35.0000000000),
290 iqr: 27.2500000000,
291 };
292 check(val, summ);
293}
294#[test]
295fn test_exp25() {
296 let val = &[
297 3.0000000000,
298 24.0000000000,
299 1.0000000000,
300 19.0000000000,
301 7.0000000000,
302 5.0000000000,
303 30.0000000000,
304 39.0000000000,
305 31.0000000000,
306 13.0000000000,
307 25.0000000000,
308 48.0000000000,
309 1.0000000000,
310 6.0000000000,
311 42.0000000000,
312 63.0000000000,
313 2.0000000000,
314 12.0000000000,
315 108.0000000000,
316 26.0000000000,
317 1.0000000000,
318 7.0000000000,
319 44.0000000000,
320 25.0000000000,
321 11.0000000000,
322 ];
323 let summ = &Summary {
324 sum: 593.0000000000,
325 min: 1.0000000000,
326 max: 108.0000000000,
327 mean: 23.7200000000,
328 median: 19.0000000000,
329 var: 601.0433333333,
330 std_dev: 24.5161851301,
331 std_dev_pct: 103.3565983562,
332 median_abs_dev: 19.2738000000,
333 median_abs_dev_pct: 101.4410526316,
334 quartiles: (6.0000000000, 19.0000000000, 31.0000000000),
335 iqr: 25.0000000000,
336 };
337 check(val, summ);
338}
339#[test]
340fn test_binom25() {
341 let val = &[
342 18.0000000000,
343 17.0000000000,
344 27.0000000000,
345 15.0000000000,
346 21.0000000000,
347 25.0000000000,
348 17.0000000000,
349 24.0000000000,
350 25.0000000000,
351 24.0000000000,
352 26.0000000000,
353 26.0000000000,
354 23.0000000000,
355 15.0000000000,
356 23.0000000000,
357 17.0000000000,
358 18.0000000000,
359 18.0000000000,
360 21.0000000000,
361 16.0000000000,
362 15.0000000000,
363 31.0000000000,
364 20.0000000000,
365 17.0000000000,
366 15.0000000000,
367 ];
368 let summ = &Summary {
369 sum: 514.0000000000,
370 min: 15.0000000000,
371 max: 31.0000000000,
372 mean: 20.5600000000,
373 median: 20.0000000000,
374 var: 20.8400000000,
375 std_dev: 4.5650848842,
376 std_dev_pct: 22.2037202539,
377 median_abs_dev: 5.9304000000,
378 median_abs_dev_pct: 29.6520000000,
379 quartiles: (17.0000000000, 20.0000000000, 24.0000000000),
380 iqr: 7.0000000000,
381 };
382 check(val, summ);
383}
384#[test]
385fn test_pois25lambda30() {
386 let val = &[
387 27.0000000000,
388 33.0000000000,
389 34.0000000000,
390 34.0000000000,
391 24.0000000000,
392 39.0000000000,
393 28.0000000000,
394 27.0000000000,
395 31.0000000000,
396 28.0000000000,
397 38.0000000000,
398 21.0000000000,
399 33.0000000000,
400 36.0000000000,
401 29.0000000000,
402 37.0000000000,
403 32.0000000000,
404 34.0000000000,
405 31.0000000000,
406 39.0000000000,
407 25.0000000000,
408 31.0000000000,
409 32.0000000000,
410 40.0000000000,
411 24.0000000000,
412 ];
413 let summ = &Summary {
414 sum: 787.0000000000,
415 min: 21.0000000000,
416 max: 40.0000000000,
417 mean: 31.4800000000,
418 median: 32.0000000000,
419 var: 26.5933333333,
420 std_dev: 5.1568724372,
421 std_dev_pct: 16.3814245145,
422 median_abs_dev: 5.9304000000,
423 median_abs_dev_pct: 18.5325000000,
424 quartiles: (28.0000000000, 32.0000000000, 34.0000000000),
425 iqr: 6.0000000000,
426 };
427 check(val, summ);
428}
429#[test]
430fn test_pois25lambda40() {
431 let val = &[
432 42.0000000000,
433 50.0000000000,
434 42.0000000000,
435 46.0000000000,
436 34.0000000000,
437 45.0000000000,
438 34.0000000000,
439 49.0000000000,
440 39.0000000000,
441 28.0000000000,
442 40.0000000000,
443 35.0000000000,
444 37.0000000000,
445 39.0000000000,
446 46.0000000000,
447 44.0000000000,
448 32.0000000000,
449 45.0000000000,
450 42.0000000000,
451 37.0000000000,
452 48.0000000000,
453 42.0000000000,
454 33.0000000000,
455 42.0000000000,
456 48.0000000000,
457 ];
458 let summ = &Summary {
459 sum: 1019.0000000000,
460 min: 28.0000000000,
461 max: 50.0000000000,
462 mean: 40.7600000000,
463 median: 42.0000000000,
464 var: 34.4400000000,
465 std_dev: 5.8685603004,
466 std_dev_pct: 14.3978417577,
467 median_abs_dev: 5.9304000000,
468 median_abs_dev_pct: 14.1200000000,
469 quartiles: (37.0000000000, 42.0000000000, 45.0000000000),
470 iqr: 8.0000000000,
471 };
472 check(val, summ);
473}
474#[test]
475fn test_pois25lambda50() {
476 let val = &[
477 45.0000000000,
478 43.0000000000,
479 44.0000000000,
480 61.0000000000,
481 51.0000000000,
482 53.0000000000,
483 59.0000000000,
484 52.0000000000,
485 49.0000000000,
486 51.0000000000,
487 51.0000000000,
488 50.0000000000,
489 49.0000000000,
490 56.0000000000,
491 42.0000000000,
492 52.0000000000,
493 51.0000000000,
494 43.0000000000,
495 48.0000000000,
496 48.0000000000,
497 50.0000000000,
498 42.0000000000,
499 43.0000000000,
500 42.0000000000,
501 60.0000000000,
502 ];
503 let summ = &Summary {
504 sum: 1235.0000000000,
505 min: 42.0000000000,
506 max: 61.0000000000,
507 mean: 49.4000000000,
508 median: 50.0000000000,
509 var: 31.6666666667,
510 std_dev: 5.6273143387,
511 std_dev_pct: 11.3913245723,
512 median_abs_dev: 4.4478000000,
513 median_abs_dev_pct: 8.8956000000,
514 quartiles: (44.0000000000, 50.0000000000, 52.0000000000),
515 iqr: 8.0000000000,
516 };
517 check(val, summ);
518}
519#[test]
520fn test_unif25() {
521 let val = &[
522 99.0000000000,
523 55.0000000000,
524 92.0000000000,
525 79.0000000000,
526 14.0000000000,
527 2.0000000000,
528 33.0000000000,
529 49.0000000000,
530 3.0000000000,
531 32.0000000000,
532 84.0000000000,
533 59.0000000000,
534 22.0000000000,
535 86.0000000000,
536 76.0000000000,
537 31.0000000000,
538 29.0000000000,
539 11.0000000000,
540 41.0000000000,
541 53.0000000000,
542 45.0000000000,
543 44.0000000000,
544 98.0000000000,
545 98.0000000000,
546 7.0000000000,
547 ];
548 let summ = &Summary {
549 sum: 1242.0000000000,
550 min: 2.0000000000,
551 max: 99.0000000000,
552 mean: 49.6800000000,
553 median: 45.0000000000,
554 var: 1015.6433333333,
555 std_dev: 31.8691595957,
556 std_dev_pct: 64.1488719719,
557 median_abs_dev: 45.9606000000,
558 median_abs_dev_pct: 102.1346666667,
559 quartiles: (29.0000000000, 45.0000000000, 79.0000000000),
560 iqr: 50.0000000000,
561 };
562 check(val, summ);
563}
564
565#[test]
566fn test_sum_f64s() {
567 assert_eq!([0.5f64, 3.2321f64, 1.5678f64].sum(), 5.2999);
568}
569#[test]
570fn test_sum_f64_between_ints_that_sum_to_0() {
571 assert_eq!([1e30f64, 1.2f64, -1e30f64].sum(), 1.2);
572}
416331ca
XL
573
574#[bench]
575pub fn sum_three_items(b: &mut Bencher) {
576 b.iter(|| {
577 [1e20f64, 1.5f64, -1e20f64].sum();
578 })
579}
580#[bench]
581pub fn sum_many_f64(b: &mut Bencher) {
582 let nums = [-1e30f64, 1e60, 1e30, 1.0, -1e60];
583 let v = (0..500).map(|i| nums[i % 5]).collect::<Vec<_>>();
584
585 b.iter(|| {
586 v.sum();
587 })
588}
589
590#[bench]
591pub fn no_iter(_: &mut Bencher) {}