-
Notifications
You must be signed in to change notification settings - Fork 11
/
quantile.rs
397 lines (390 loc) · 32.9 KB
/
quantile.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
use average::{Estimate, Quantile};
#[test]
fn few_observations() {
let mut q = Quantile::new(0.5);
assert_eq!(q.len(), 0);
assert!(q.quantile().is_nan());
q.add(1.);
assert_eq!(q.len(), 1);
assert_eq!(q.quantile(), 1.);
q.add(2.);
assert_eq!(q.len(), 2);
assert_eq!(q.quantile(), 1.5);
q.add(3.);
assert_eq!(q.len(), 3);
assert_eq!(q.quantile(), 2.);
q.add(4.);
assert_eq!(q.len(), 4);
assert_eq!(q.quantile(), 2.5);
}
#[cfg(feature = "serde1")]
#[test]
fn few_observations_serde() {
let mut q = Quantile::new(0.5);
q.add(1.);
q.add(2.);
q.add(3.);
q.add(4.);
let b = serde_json::to_string(&q).unwrap();
assert_eq!(&b, "{\"q\":[1.0,2.0,3.0,4.0,0.0],\"n\":[1,2,3,4,4],\"m\":[1.0,2.0,3.0,4.0,5.0],\"dm\":[0.0,0.25,0.5,0.75,1.0]}");
let c: Quantile = serde_json::from_str(&b).unwrap();
assert_eq!(c.len(), 4);
assert_eq!(c.quantile(), 2.5);
}
#[cfg(feature = "std")]
#[test]
fn percentile_99_9() {
let observations = [
20., 20., 27., 28., 28., 34., 32., 32., 34., 33., 32., 30., 32., 30., 35., 27., 33., 26.,
33., 26., 35., 32., 37., 30., 38., 26., 39., 37., 42., 29., 45., 27., 51., 33., 46., 38.,
48., 31., 42., 35., 40., 29., 43., 30., 40., 29., 35., 34., 40., 24., 48., 32., 51., 33.,
32., 32., 30., 28., 29., 31., 29., 29., 27., 2., 35., 3., 34., 28., 1., 25., 29., 28., 30.,
27., 28., 3., 16., 31., 18., 28., 22., 30., 16., 27., 21., 6., 20., 28., 20., 6., 13., 20.,
20., 30., 30., 28., 29., 29., 28., 27., 35., 25., 36., 25., 33., 27., 38., 34., 36., 33.,
33., 41., 35., 34., 34., 37., 5., 31., 39., 34., 35., 41., 29., 39., 30., 37., 33., 33.,
36., 33., 42., 32., 45., 33., 48., 31., 44., 30., 43., 29., 33., 29., 34., 33., 35., 33.,
43., 24., 36., 29., 34., 26., 35., 6., 43., 28., 35., 28., 36., 4., 40., 25., 45., 20.,
20., 30., 21., 28., 25., 36., 30., 37., 29., 40., 27., 40., 29., 37., 30., 40., 32., 45.,
30., 42., 35., 44., 35., 38., 36., 37., 32., 35., 37., 39., 35., 36., 32., 35., 34., 36.,
32., 37., 30., 27., 27., 42., 26., 39., 24., 42., 28., 43., 24., 44., 27., 40., 31., 29.,
21., 28., 21., 38., 22., 35., 27., 25., 21., 30., 1., 30., 17., 26., 18., 28., 18., 2.,
18., 30., 17., 30., 16., 28., 16., 28., 22., 26., 21., 23., 20., 20., 30., 21., 38., 23.,
37., 28., 34., 27., 33., 29., 34., 26., 39., 26., 44., 25., 44., 26., 50., 25., 55., 24.,
56., 31., 48., 35., 49., 36., 45., 40., 49., 30., 48., 29., 1., 35., 47., 35., 5., 27.,
47., 22., 41., 26., 43., 26., 51., 1., 46., 1., 40., 1., 40., 0., 20., 20., 30., 22., 28.,
25., 34., 27., 36., 29., 33., 35., 34., 32., 35., 29., 35., 3., 29., 31., 22., 38., 23.,
4., 28., 32., 31., 31., 29., 4., 28., 2., 33., 3., 27., 4., 32., 29., 34., 27., 32., 2.,
32., 26., 38., 1., 37., 2., 39., 38., 35., 41., 32., 0., 20., 20., 21., 28., 26., 30., 26.,
36., 30., 37., 32., 40., 37., 41., 40., 36., 40., 38., 42., 42., 42., 46., 39., 43., 38.,
48., 36., 51., 36., 48., 41., 46., 42., 46., 40., 40., 45., 37., 37., 40., 40., 36., 44.,
42., 37., 37., 37., 39., 40., 37., 37., 28., 31., 28., 27., 33., 32., 4., 26., 34., 20.,
20., 31., 28., 29., 47., 32., 31., 30., 32., 37., 33., 44., 35., 48., 33., 43., 28., 36.,
30., 40., 33., 41., 33., 20., 20., 30., 30., 33., 28., 36., 36., 30., 7., 31., 5., 29.,
35., 33., 33., 35., 34., 10., 38., 46., 44., 40., 39., 38., 43., 32., 39., 41., 40., 41.,
39., 44., 44., 41., 43., 30., 27., 40., 26., 37., 27., 36., 29., 35., 27., 40., 28., 39.,
28., 38., 29., 28., 23., 33., 23., 33., 23., 35., 25., 36., 24., 34., 20., 32., 18., 29.,
21., 6., 15., 20., 8., 20., 5., 6., 6., 17., 4., 2., 7., 5., 7., 17., 3., 19., 6., 19., 5.,
12., 4., 13., 2., 29., 3., 31., 0., 20., 20., 22., 19., 30., 26., 24., 26., 23., 26., 20.,
27., 35., 3., 34., 33., 35., 29., 43., 28., 53., 29., 51., 0., 20., 20., 31., 28., 29.,
47., 32., 39., 33., 39., 36., 42., 33., 43., 34., 45., 32., 48., 32., 47., 33., 49., 29.,
50., 30., 48., 33., 45., 40., 43., 36., 43., 36., 42., 36., 47., 40., 46., 40., 46., 39.,
41., 38., 37., 47., 4., 49., 40., 39., 3., 41., 1., 37., 3., 41., 6., 41., 36., 36., 40.,
41., 39., 40., 45., 34., 30., 25., 31., 27., 29., 23., 26., 18., 25., 18., 20., 20., 30.,
20., 31., 29., 29., 33., 37., 34., 37., 37., 33., 35., 37., 39., 35., 31., 29., 33., 34.,
32., 37., 31., 36., 37., 35., 42., 36., 40., 29., 29., 27., 30., 29., 30., 4., 33., 24.,
37., 28., 32., 25., 30., 27., 5., 29., 24., 21., 27., 25., 5., 20., 20., 11., 22., 15.,
21., 22., 19., 20., 17., 20., 23., 24., 5., 26., 14., 24., 16., 20., 18., 4., 18., 14., 4.,
20., 20., 20., 28., 24., 29., 30., 29., 35., 27., 36., 32., 34., 34., 31., 33., 31., 38.,
31., 36., 30., 38., 31., 37., 36., 31., 36., 36., 38., 38., 40., 36., 43., 28., 49., 35.,
35., 37., 40., 38., 5., 41., 38., 41., 39., 39., 40., 31., 38., 29., 39., 31., 37., 33.,
37., 32., 33., 34., 3., 28., 27., 29., 30., 32., 29., 26., 28., 25., 27., 21., 33., 19.,
26., 16., 27., 15., 26., 16., 24., 17., 27., 18., 22., 11., 18., 4., 22., 12., 19., 10.,
22., 8., 24., 8., 20., 9., 18., 7., 23., 9., 19., 8., 21., 8., 21., 8., 22., 5., 22., 5.,
25., 5., 24., 5., 26., 5., 20., 20., 29., 29., 31., 27., 33., 29., 31., 28., 42., 36., 38.,
37., 30., 43., 31., 41., 29., 34., 25., 35., 30., 37., 32., 39., 32., 36., 31., 39., 33.,
36., 36., 31., 43., 34., 41., 2., 45., 2., 38., 30., 45., 37., 42., 39., 39., 41., 40.,
39., 39., 41., 39., 36., 41., 40., 40., 39., 40., 37., 47., 1., 30., 26., 29., 27., 35.,
3., 32., 22., 26., 22., 29., 20., 28., 2., 33., 2., 33., 21., 36., 2., 34., 20., 31., 21.,
29., 23., 6., 22., 24., 20., 23., 20., 22., 15., 27., 14., 20., 20., 27., 27., 26., 33.,
25., 31., 29., 32., 32., 30., 34., 32., 39., 37., 34., 38., 35., 35., 40., 3., 33., 40.,
39., 3., 28., 41., 34., 39., 28., 30., 28., 26., 18., 34., 17., 33., 22., 39., 19., 37.,
30., 28., 33., 33., 31., 38., 29., 33., 29., 31., 37., 22., 38., 21., 3., 28., 38., 33.,
30., 28., 32., 25., 27., 23., 23., 23., 20., 23., 22., 20., 24., 22., 22., 22., 22., 20.,
18., 25., 21., 26., 21., 24., 20., 22., 12., 29., 12., 29., 16., 23., 10., 19., 13., 8.,
18., 20., 19., 22., 3., 30., 4., 30., 22., 5., 25., 29., 6., 27., 8., 18., 8., 17., 6.,
16., 7., 16., 3., 14., 3., 9., 8., 20., 20., 27., 28., 30., 30., 33., 35., 38., 37., 41.,
1., 28., 29., 4., 27., 29., 24., 31., 30., 35., 30., 43., 38., 50., 8., 51., 4., 55., 40.,
7., 45., 51., 42., 52., 44., 5., 38., 41., 40., 45., 42., 37., 34., 7., 34., 42., 2., 34.,
26., 36., 17., 29., 16., 30., 15., 26., 7., 27., 7., 27., 20., 20., 29., 29., 33., 38.,
37., 41., 40., 40., 43., 36., 39., 28., 46., 28., 38., 29., 39., 36., 40., 31., 38., 32.,
37., 30., 36., 32., 37., 34., 36., 39., 35., 34., 33., 33., 25., 30., 5., 25., 6., 25.,
24., 23., 28., 20., 31., 6., 23., 24., 22., 22., 22., 23., 26., 21., 24., 21., 27., 17.,
28., 20., 28., 21., 26., 26., 22., 25., 22., 21., 4., 17., 21., 6., 20., 18., 12., 3., 13.,
10., 14., 12., 14., 3., 12., 7., 14., 11., 17., 15., 16., 11., 15., 6., 15., 6., 31., 4.,
20., 20., 30., 21., 33., 30., 31., 29., 26., 31., 26., 34., 33., 40., 32., 44., 32., 47.,
29., 44., 28., 46., 28., 51., 35., 51., 34., 45., 31., 48., 37., 43., 32., 41., 32., 34.,
33., 31., 31., 33., 37., 38., 33., 25., 29., 34., 25., 24., 21., 31., 21., 29., 24., 24.,
17., 20., 17., 16., 22., 16., 23., 19., 24., 15., 20., 17., 20., 20., 19., 16., 20., 19.,
17., 18., 19., 20., 18., 22., 17., 23., 17., 20., 15., 6., 16., 4., 15., 16., 1., 16., 0.,
20., 20., 29., 29., 27., 30., 32., 24., 25., 35., 33., 34., 30., 30., 24., 31., 26., 32.,
27., 32., 26., 28., 26., 30., 38., 30., 36., 35., 38., 33., 34., 34., 37., 34., 35., 35.,
37., 32., 34., 30., 5., 37., 32., 39., 29., 38., 33., 35., 35., 38., 30., 39., 27., 34.,
31., 39., 30., 31., 21., 30., 22., 27., 24., 28., 26., 32., 29., 32., 33., 29., 34., 27.,
34., 25., 34., 20., 42., 20., 41., 19., 42., 21., 44., 24., 43., 21., 42., 14., 40., 4.,
41., 21., 40., 20., 42., 12., 36., 16., 34., 15., 20., 20., 30., 22., 28., 27., 37., 25.,
41., 34., 40., 35., 40., 33., 7., 34., 41., 33., 48., 31., 47., 39., 51., 32., 47., 30.,
44., 30., 34., 29., 43., 34., 41., 44., 41., 46., 32., 40., 34., 40., 34., 41., 32., 41.,
32., 37., 35., 32., 29., 30., 26., 22., 26., 25., 15., 19., 15., 19., 14., 17., 16., 17.,
17., 22., 1., 39., 3., 33., 20., 20., 28., 21., 38., 23., 40., 21., 39., 22., 34., 27.,
35., 24., 38., 24., 39., 25., 36., 25., 34., 27., 33., 34., 33., 25., 24., 26., 26., 24.,
25., 24., 1., 22., 36., 22., 37., 22., 38., 17., 40., 16., 33., 17., 33., 16., 37., 16.,
35., 15., 36., 19., 29., 21., 30., 16., 30., 3., 39., 9., 3., 5., 35., 5., 38., 0., 20.,
20., 20., 21., 21., 27., 26., 26., 36., 30., 37., 27., 37., 28., 37., 28., 41., 34., 38.,
36., 44., 38., 44., 31., 38., 29., 39., 35., 41., 40., 40., 42., 40., 38., 35., 40., 40.,
39., 32., 41., 34., 38., 30., 37., 34., 44., 33., 41., 36., 40., 38., 38., 40., 45., 39.,
48., 38., 47., 36., 43., 34., 40., 39., 36., 35., 38., 38., 2., 39., 1., 23., 33., 1., 20.,
20., 30., 22., 28., 30., 37., 28., 42., 31., 43., 30., 42., 30., 43., 29., 45., 31., 41.,
32., 42., 29., 40., 33., 41., 30., 37., 32., 47., 35., 43., 34., 45., 32., 36., 38., 33.,
37., 34., 39., 38., 35., 38., 1., 37., 38., 33., 36., 38., 40., 42., 2., 44., 4., 39., 3.,
20., 20., 29., 29., 28., 38., 27., 48., 30., 42., 32., 43., 33., 36., 40., 42., 38., 46.,
38., 38., 41., 38., 47., 3., 47., 41., 47., 44., 2., 44., 48., 42., 50., 42., 49., 42.,
54., 52., 50., 51., 34., 49., 28., 55., 2., 48., 3., 42., 2., 37., 12., 44., 12., 38., 12.,
37., 2., 37., 0., 20., 20., 30., 19., 38., 29., 36., 30., 37., 29., 33., 31., 33., 29.,
38., 36., 36., 33., 30., 30., 38., 35., 30., 35., 33., 36., 36., 37., 40., 33., 37., 27.,
37., 27., 37., 33., 44., 39., 45., 40., 44., 41., 49., 40., 48., 3., 43., 0., 20., 20.,
27., 28., 30., 34., 5., 37., 30., 37., 26., 45., 6., 38., 36., 37., 34., 31., 34., 31.,
37., 32., 33., 28., 40., 29., 42., 38., 38., 42., 37., 40., 39., 36., 40., 32., 43., 31.,
41., 36., 36., 39., 37., 39., 4., 33., 39., 31., 38., 32., 45., 38., 29., 27., 30., 28.,
30., 32., 28., 37., 28., 30., 27., 31., 28., 20., 20., 30., 27., 34., 28., 42., 28., 38.,
31., 26., 32., 33., 32., 31., 31., 32., 26., 33., 35., 28., 43., 27., 39., 3., 45., 3.,
44., 20., 20., 30., 19., 39., 22., 40., 20., 41., 26., 36., 35., 43., 33., 40., 29., 38.,
28., 31., 28., 4., 23., 35., 28., 35., 34., 33., 42., 34., 40., 36., 42., 28., 43., 37.,
42., 38., 40., 34., 39., 35., 36., 33., 39., 34., 33., 33., 34., 33., 34., 31., 29., 15.,
30., 14., 25., 14., 21., 19., 22., 19., 17., 23., 1., 23., 14., 17., 13., 17., 10., 17.,
8., 16., 9., 17., 12., 17., 12., 17., 11., 20., 14., 19., 5., 19., 20., 20., 30., 22., 28.,
29., 32., 31., 33., 29., 34., 31., 31., 32., 34., 35., 33., 36., 32., 36., 32., 36., 31.,
30., 30., 34., 34., 35., 44., 36., 47., 41., 42., 38., 38., 33., 37., 35., 37., 36., 2.,
45., 39., 47., 38., 41., 43., 42., 41., 43., 33., 3., 32., 42., 32., 45., 28., 4., 39.,
40., 31., 47., 20., 39., 14., 27., 17., 27., 18., 26., 17., 32., 3., 32., 17., 20., 20.,
29., 29., 27., 31., 33., 36., 36., 32., 40., 32., 41., 37., 43., 38., 46., 33., 41., 31.,
41., 36., 43., 32., 42., 37., 41., 34., 36., 55., 31., 49., 32., 43., 33., 42., 30., 43.,
32., 42., 4., 47., 3., 46., 38., 2., 37., 44., 38., 43., 4., 41., 35., 41., 23., 25., 17.,
25., 23., 29., 29., 25., 26., 28., 26., 26., 25., 26., 29., 5., 29., 28., 27., 32., 25.,
33., 25., 35., 20., 34., 22., 36., 20., 23., 13., 25., 16., 22., 12., 4., 15., 19., 15.,
21., 11., 19., 12., 20., 20., 29., 29., 33., 32., 33., 33., 34., 28., 41., 28., 37., 29.,
45., 28., 41., 30., 37., 30., 31., 36., 30., 35., 36., 27., 36., 25., 38., 20., 20., 20.,
30., 22., 28., 30., 36., 32., 8., 39., 34., 45., 35., 49., 37., 51., 32., 46., 39., 4.,
51., 30., 33., 28., 32., 23., 41., 3., 37., 24., 34., 24., 33., 25., 27., 25., 31., 23.,
30., 26., 27., 32., 28., 31., 29., 33., 29., 37., 29., 37., 25., 44., 26., 41., 20., 32.,
17., 32., 22., 30., 23., 26., 24., 5., 23., 18., 29., 17., 5., 22., 6., 22., 27., 26., 24.,
21., 28., 22., 30., 5., 31., 20., 22., 20., 32., 13., 27., 15., 29., 13., 5., 19., 24.,
14., 28., 14., 28., 2., 28., 16., 6., 16., 3., 16., 6., 16., 18., 14., 2., 21., 17., 21.,
24., 20., 18., 18., 4., 18., 7., 18., 20., 20., 28., 22., 32., 33., 33., 42., 34., 40.,
35., 35., 29., 3., 30., 36., 26., 35., 30., 39., 28., 36., 24., 4., 20., 20., 21., 28.,
26., 30., 26., 31., 37., 33., 38., 31., 38., 32., 38., 29., 44., 30., 42., 28., 39., 32.,
40., 32., 45., 37., 41., 28., 49., 31., 47., 35., 45., 33., 49., 32., 43., 34., 44., 32.,
46., 40., 48., 39., 6., 31., 39., 25., 39., 23., 39., 20., 36., 22., 37., 18., 31., 19.,
37., 1., 35., 20., 37., 27., 35., 34., 33., 33., 38., 30., 26., 39., 28., 32., 33., 30.,
29., 36., 16., 27., 20., 20., 29., 29., 27., 31., 28., 29., 34., 2., 26., 4., 31., 27.,
34., 36., 34., 49., 40., 33., 26., 31., 29., 32., 20., 35., 22., 32., 25., 36., 30., 32.,
36., 5., 36., 26., 31., 34., 3., 29., 28., 29., 22., 33., 24., 29., 25., 5., 22., 19., 26.,
19., 24., 18., 27., 17., 4., 23., 24., 16., 31., 14., 29., 1., 30., 15., 5., 14., 6., 14.,
20., 13., 4., 18., 23., 13., 22., 16., 9., 21., 13., 20., 5., 7., 12., 11., 12., 11., 12.,
9., 10., 9., 10., 9., 10., 10., 9., 9., 8., 6., 10., 6., 26., 6., 27., 5., 30., 8., 29.,
3., 31., 7., 20., 20., 27., 27., 33., 30., 37., 26., 20., 20., 29., 29., 32., 31., 33.,
29., 32., 32., 31., 32., 31., 32., 31., 33., 27., 32., 29., 32., 28., 31., 29., 31., 32.,
32., 31., 32., 33., 30., 33., 33., 36., 33., 36., 33., 35., 34., 31., 36., 35., 34., 3.,
30., 27., 33., 28., 41., 26., 41., 26., 44., 27., 43., 30., 40., 28., 37., 30., 33., 30.,
34., 33., 36., 34., 1., 35., 3., 36., 20., 20., 30., 22., 28., 24., 37., 28., 39., 26.,
37., 33., 40., 36., 43., 38., 44., 35., 41., 32., 45., 29., 46., 28., 49., 29., 46., 32.,
52., 33., 45., 35., 42., 35., 42., 35., 37., 36., 41., 32., 38., 30., 43., 29., 39., 30.,
43., 5., 42., 33., 42., 7., 46., 4., 45., 27., 40., 1., 20., 20., 21., 30., 25., 33., 27.,
34., 29., 33., 35., 33., 33., 33., 33., 32., 41., 33., 38., 33., 42., 31., 44., 33., 35.,
40., 35., 33., 39., 35., 39., 35., 6., 35., 33., 39., 36., 34., 50., 30., 53., 38., 38.,
39., 3., 33., 38., 33., 34., 32., 33., 24., 33., 20., 20., 30., 21., 38., 25., 39., 32.,
43., 33., 40., 32., 42., 29., 39., 29., 42., 30., 38., 30., 38., 28., 37., 31., 40., 37.,
36., 32., 38., 35., 42., 35., 40., 33., 42., 29., 45., 31., 38., 3., 43., 2., 46., 35.,
41., 34., 45., 40., 48., 3., 51., 2., 43., 2., 54., 25., 58., 2., 53., 1., 51., 0., 20.,
20., 21., 27., 21., 37., 30., 37., 34., 37., 31., 40., 32., 42., 33., 46., 30., 38., 28.,
35., 26., 31., 26., 36., 27., 34., 30., 35., 25., 31., 23., 34., 1., 35., 26., 32., 38.,
39., 33., 38., 40., 32., 2., 34., 1., 32., 0., 20., 20., 28., 22., 30., 23., 33., 26., 40.,
34., 37., 36., 35., 30., 37., 28., 40., 29., 39., 28., 43., 28., 41., 27., 41., 29., 38.,
34., 40., 38., 33., 40., 33., 46., 35., 44., 35., 43., 33., 41., 32., 37., 34., 43., 32.,
41., 34., 43., 36., 41., 32., 45., 30., 46., 37., 6., 41., 2., 43., 5., 23., 32., 3., 28.,
23., 25., 1., 19., 13., 15., 24., 15., 20., 20., 28., 27., 31., 33., 33., 1., 25., 32., 4.,
35., 24., 35., 26., 38., 29., 3., 28., 38., 1., 40., 25., 42., 26., 34., 31., 40., 28.,
41., 20., 20., 30., 30., 38., 32., 37., 5., 40., 29., 41., 31., 35., 28., 32., 23., 29.,
28., 28., 30., 30., 35., 41., 33., 41., 33., 40., 28., 45., 32., 42., 33., 38., 34., 39.,
26., 38., 32., 38., 36., 32., 36., 31., 39., 32., 32., 32., 33., 32., 34., 24., 2., 20.,
33., 2., 28., 5., 35., 3., 29., 5., 33., 3., 35., 2., 41., 20., 20., 29., 29., 39., 31.,
44., 39., 37., 37., 44., 41., 45., 34., 46., 40., 43., 46., 38., 44., 42., 42., 40., 43.,
43., 46., 32., 20., 20., 31., 28., 29., 47., 5., 43., 20., 45., 27., 41., 34., 38., 41.,
34., 42., 36., 42., 24., 35., 25., 36., 27., 34., 31., 33., 33., 34., 36., 38., 34., 37.,
33., 31., 28., 32., 33., 32., 37., 30., 40., 34., 38., 2., 31., 38., 0., 20., 20., 29.,
29., 31., 25., 42., 26., 45., 30., 45., 31., 45., 31., 38., 32., 40., 27., 41., 27., 43.,
26., 40., 22., 39., 28., 36., 37., 34., 38., 32., 30., 32., 30., 31., 31., 30., 33., 31.,
33., 34., 39., 32., 1., 31., 32., 30., 29., 24., 25., 22., 34., 4., 34., 28., 29., 4., 35.,
30., 25., 21., 19., 21., 17., 19., 16., 17., 15., 14., 19., 15., 18., 14., 21., 5., 27.,
10., 25., 11., 24., 16., 1., 13., 35., 4., 42., 0., 20., 20., 21., 27., 27., 28., 37., 25.,
31., 27., 31., 29., 38., 33., 38., 32., 36., 34., 33., 33., 33., 36., 30., 32., 34., 36.,
33., 40., 38., 43., 35., 36., 40., 31., 35., 47., 35., 44., 34., 42., 32., 40., 30., 38.,
32., 36., 33., 39., 18., 34., 21., 34., 3., 34., 21., 33., 20., 20., 30., 22., 28., 29.,
30., 33., 38., 31., 43., 34., 48., 31., 44., 31., 44., 34., 45., 37., 52., 36., 49., 34.,
46., 38., 48., 39., 43., 43., 40., 27., 31., 35., 33., 36., 22., 34., 31., 33., 34., 24.,
30., 25., 34., 23., 23., 23., 24., 32., 21., 32., 18., 32., 24., 31., 23., 31., 3., 20.,
20., 30., 21., 38., 23., 39., 25., 32., 26., 30., 29., 28., 31., 34., 29., 36., 36., 32.,
35., 34., 33., 32., 36., 40., 38., 33., 42., 37., 38., 42., 37., 45., 38., 42., 39., 43.,
41., 36., 45., 26., 20., 20., 31., 28., 29., 47., 32., 39., 33., 42., 39., 42., 35., 43.,
37., 33., 39., 30., 37., 36., 38., 35., 37., 37., 38., 46., 36., 41., 36., 50., 33., 42.,
41., 20., 20., 22., 29., 24., 32., 24., 25., 32., 35., 33., 46., 26., 27., 27., 30., 21.,
23., 21., 29., 22., 28., 26., 26., 24., 25., 24., 23., 23., 22., 26., 27., 28., 24., 32.,
26., 32., 26., 26., 27., 25., 30., 25., 7., 28., 30., 31., 31., 31., 31., 29., 32., 29.,
37., 5., 38., 2., 37., 2., 37., 35., 37., 34., 35., 38., 38., 34., 2., 42., 29., 2., 27.,
42., 21., 45., 3., 39., 4., 42., 17., 43., 2., 41., 15., 7., 13., 4., 20., 20., 29., 30.,
38., 31., 37., 30., 37., 31., 38., 28., 32., 31., 31., 32., 31., 25., 32., 27., 29., 25.,
28., 28., 33., 25., 34., 27., 29., 33., 28., 27., 26., 32., 31., 33., 33., 36., 32., 36.,
34., 35., 35., 33., 32., 38., 30., 41., 22., 41., 4., 39., 23., 28., 17., 32., 3., 37.,
18., 36., 21., 42., 5., 43., 22., 41., 17., 24., 4., 26., 14., 23., 17., 20., 17., 21.,
20., 24., 24., 23., 23., 6., 24., 16., 20., 20., 20., 33., 5., 31., 1., 20., 20., 29., 30.,
38., 30., 37., 28., 43., 34., 38., 37., 35., 30., 43., 26., 45., 27., 49., 30., 48., 24.,
41., 21., 43., 21., 43., 19., 41., 20., 39., 18., 42., 29., 36., 32., 37., 32., 41., 28.,
47., 23., 45., 22., 48., 21., 43., 22., 36., 29., 36., 25., 33., 1., 26., 1., 31., 21., 1.,
19., 27., 21., 26., 28., 27., 28., 27., 30., 4., 26., 4., 28., 22., 26., 3., 28., 5., 27.,
5., 29., 5., 23., 2., 24., 4., 26., 2., 24., 4., 26., 22., 24., 18., 3., 27., 25., 4., 27.,
7., 24., 7., 24., 6., 27., 4., 26., 27., 24., 3., 23., 4., 20., 3., 16., 4., 24., 3., 16.,
4., 24., 3., 16., 20., 20., 27., 28., 30., 34., 33., 32., 38., 37., 33., 32., 33., 27.,
33., 24., 37., 25., 44., 27., 45., 26., 45., 27., 42., 26., 41., 32., 38., 32., 41., 32.,
41., 42., 50., 20., 20., 29., 30., 29., 30., 36., 29., 43., 30., 54., 34., 54., 33., 48.,
31., 48., 39., 48., 45., 48., 3., 55., 20., 20., 28., 30., 30., 34., 24., 32., 31., 33.,
27., 30., 37., 29., 38., 31., 34., 33., 41., 36., 41., 39., 1., 30., 34., 30., 26., 34.,
30., 33., 5., 33., 29., 34., 33., 39., 2., 33., 8., 39., 25., 39., 3., 32., 13., 21., 17.,
21., 17., 22., 17., 25., 17., 20., 9., 23., 10., 23., 11., 24., 8., 27., 2., 26., 7., 24.,
10., 24., 8., 24., 7., 26., 7., 23., 5., 24., 6., 26., 6., 27., 3., 24., 6., 25., 8., 25.,
5., 7., 4., 21., 7., 26., 8., 27., 7., 31., 2., 44., 5., 39., 7., 41., 4., 41., 3., 39.,
0., 20., 20., 28., 30., 38., 32., 36., 34., 37., 24., 36., 38., 35., 37., 34., 32., 30.,
34., 33., 31., 35., 29., 34., 36., 27., 33., 27., 37., 29., 45., 35., 42., 33., 40., 33.,
39., 37., 37., 36., 34., 37., 33., 34., 38., 37., 33., 34., 38., 40., 34., 37., 38., 32.,
37., 27., 28., 3., 33., 30., 3., 25., 3., 27., 6., 25., 25., 2., 27., 2., 24., 2., 26.,
27., 2., 30., 4., 32., 3., 30., 2., 30., 3., 22., 5., 27., 33., 18., 29., 20., 28., 2.,
21., 3., 27., 19., 28., 21., 39., 1., 29., 0., 20., 20., 30., 30., 38., 31., 39., 35., 40.,
33., 40., 34., 40., 38., 43., 37., 38., 33., 34., 30., 43., 28., 47., 29., 42., 28., 40.,
30., 40., 26., 37., 33., 36., 32., 2., 26., 36., 31., 40., 36., 38., 33., 36., 31., 35.,
31., 42., 30., 40., 26., 35., 27., 35., 27., 39., 26., 36., 26., 33., 26., 29., 28., 29.,
33., 28., 32., 29., 32., 30., 31., 29., 32., 27., 38., 25., 38., 27., 38., 30., 39., 28.,
37., 36., 41., 35., 37., 35., 30., 34., 34., 27., 24., 27., 22., 24., 20., 22., 24., 26.,
8., 29., 21., 27., 20., 20., 30., 30., 38., 31., 36., 35., 34., 34., 35., 31., 32., 34.,
33., 36., 34., 36., 37., 28., 36., 30., 33., 26., 32., 25., 32., 26., 28., 28., 34., 25.,
34., 29., 37., 23., 49., 1., 48., 1., 45., 4., 46., 3., 38., 20., 39., 23., 39., 3., 42.,
29., 41., 2., 41., 28., 43., 32., 36., 5., 35., 35., 31., 6., 32., 4., 29., 43., 26., 45.,
4., 50., 3., 43., 27., 40., 28., 4., 28., 38., 25., 34., 27., 33., 28., 3., 21., 27., 28.,
4., 28., 25., 25., 23., 28., 27., 29., 18., 24., 26., 27., 5., 21., 24., 24., 27., 21.,
26., 19., 3., 17., 6., 19., 19., 1., 30., 2., 36., 1., 31., 1., 29., 2., 20., 20., 21.,
30., 27., 33., 28., 32., 32., 33., 32., 34., 30., 36., 32., 35., 35., 37., 29., 40., 6.,
46., 32., 51., 7., 53., 45., 47., 43., 44., 39., 0., 20., 20., 29., 29., 27., 27., 29.,
29., 37., 29., 36., 36., 30., 47., 28., 40., 36., 43., 37., 40., 36., 36., 35., 37., 36.,
34., 35., 41., 42., 38., 39., 34., 44., 34., 38., 45., 43., 35., 44., 42., 44., 42., 43.,
45., 36., 45., 34., 43., 35., 38., 38., 33., 42., 28., 27., 1., 29., 27., 28., 29., 20.,
26., 13., 41., 18., 33., 3., 37., 17., 29., 2., 23., 14., 26., 14., 30., 15., 29., 14.,
27., 10., 27., 14., 26., 12., 3., 12., 21., 2., 24., 13., 26., 12., 23., 14., 19., 1., 9.,
5., 8., 6., 9., 6., 9., 5., 7., 3., 8., 3., 9., 4., 9., 6., 10., 3., 28., 1., 27., 3., 29.,
3., 27., 3., 30., 2., 41., 2., 44., 1., 39., 0., 20., 20., 30., 22., 28., 28., 33., 30.,
36., 30., 43., 31., 37., 29., 41., 33., 44., 31., 46., 29., 44., 34., 39., 33., 36., 34.,
40., 29., 38., 22., 30., 33., 29., 42., 29., 35., 28., 31., 33., 14., 16., 15., 23., 14.,
28., 17., 26., 16., 27., 17., 31., 18., 30., 17., 29., 2., 33., 13., 32., 19., 32., 2.,
30., 16., 28., 16., 26., 20., 23., 19., 22., 20., 14., 12., 15., 9., 17., 10., 20., 10.,
14., 9., 9., 12., 10., 12., 9., 13., 8., 10., 9., 9., 9., 9., 12., 9., 29., 3., 34., 2.,
24., 7., 23., 5., 21., 4., 21., 2., 28., 2., 28., 1., 28., 2., 28., 1., 26., 0., 20., 20.,
27., 28., 30., 30., 33., 33., 31., 30., 37., 32., 37., 27., 39., 30., 40., 32., 41., 36.,
40., 36., 44., 41., 44., 41., 34., 43., 40., 40., 40., 40., 42., 42., 52., 36., 48., 33.,
45., 36., 47., 35., 43., 38., 35., 33., 41., 35., 41., 33., 3., 38., 39., 35., 38., 37.,
40., 33., 20., 20., 28., 21., 34., 25., 33., 26., 37., 34., 35., 35., 34., 31., 35., 31.,
34., 32., 34., 34., 42., 39., 33., 38., 33., 37., 32., 41., 29., 42., 30., 42., 24., 41.,
26., 30., 23., 37., 19., 23., 27., 23., 23., 24., 25., 23., 26., 22., 28., 23., 27., 18.,
22., 19., 19., 18., 22., 18., 22., 22., 21., 17., 20., 20., 17., 19., 21., 18., 21., 26.,
20., 21., 19., 15., 18., 14., 18., 4., 16., 12., 16., 20., 20., 30., 22., 30., 26., 30.,
33., 36., 4., 29., 33., 27., 31., 26., 32., 30., 37., 32., 36., 33., 42., 30., 42., 32.,
36., 36., 38., 48., 36., 47., 37., 44., 39., 43., 37., 37., 38., 35., 43., 41., 41., 37.,
34., 31., 23., 19., 26., 19., 26., 16., 29., 23., 30., 2., 28., 18., 28., 17., 23., 3.,
20., 12., 11., 7., 10., 7., 11., 7., 12., 7., 11., 7., 9., 7., 8., 9., 7., 7., 8., 6., 7.,
7., 11., 8., 10., 6., 25., 4., 23., 4., 20., 20., 30., 30., 38., 35., 36., 36., 38., 39.,
33., 32., 45., 30., 45., 36., 40., 31., 46., 30., 54., 34., 52., 30., 51., 31., 45., 36.,
41., 39., 43., 38., 41., 32., 36., 37., 40., 37., 33., 38., 36., 31., 35., 6., 30., 5.,
21., 22., 25., 21., 23., 20., 21., 26., 21., 22., 23., 23., 24., 24., 20., 24., 21., 31.,
20., 31., 20., 32., 24., 27., 23., 25., 20., 19., 22., 21., 6., 21., 5., 20., 19., 18., 5.,
22., 16., 18., 14., 13., 4., 17., 20., 16., 14., 15., 13., 12., 4., 16., 4., 18., 17., 13.,
14., 18., 3., 20., 9., 20., 13., 20., 12., 21., 12., 21., 11., 18., 1., 22., 16., 15., 2.,
21., 3., 19., 7., 13., 24., 5., 26., 6., 25., 4., 26., 5., 27., 16., 7., 18., 4., 15., 2.,
18., 4., 15., 4., 20., 25., 5., 27., 5., 26., 3., 30., 2., 29., 13., 7., 12., 5., 12., 4.,
17., 23., 3., 25., 4., 6., 5., 22., 15., 4., 16., 19., 4., 21., 3., 21., 11., 6., 12., 25.,
12., 26., 11., 22., 2., 26., 3., 30., 6., 20., 20., 30., 30., 33., 35., 31., 37., 26., 35.,
33., 41., 35., 43., 36., 39., 35., 42., 39., 44., 41., 45., 36., 44., 33., 47., 33., 48.,
33., 46., 32., 48., 30., 48., 20., 20., 27., 27., 28., 31., 32., 32., 32., 29., 28., 24.,
31., 23., 32., 31., 35., 32., 42., 32., 43., 4., 49., 2., 49., 28., 52., 34., 47., 34.,
38., 30., 39., 33., 46., 6., 38., 24., 32., 36., 35., 20., 20., 29., 29., 27., 24., 34.,
27., 31., 28., 30., 24., 29., 24., 24., 25., 28., 29., 28., 28., 29., 31., 28., 39., 34.,
42., 37., 47., 3., 51., 35., 46., 38., 42., 45., 3., 41., 0., 20., 20., 28., 30., 30., 28.,
32., 32., 31., 34., 30., 35., 31., 41., 37., 40., 29., 47., 36., 47., 37., 45., 37., 37.,
31., 33., 31., 31., 32., 35., 34., 4., 38., 25., 40., 6., 32., 30., 35., 5., 44., 30., 39.,
37., 42., 39., 49., 37., 55., 31., 47., 38., 35., 38., 41., 37., 44., 25., 42., 23., 41.,
34., 38., 31., 3., 31., 4., 33., 43., 3., 47., 1., 51., 1., 50., 0., 20., 20., 27., 27.,
31., 29., 34., 31., 39., 6., 45., 27., 45., 29., 41., 35., 41., 35., 38., 33., 40., 35.,
34., 32., 39., 42., 37., 40., 33., 40., 39., 34., 31., 33., 31., 31., 36., 38., 34., 33.,
35., 41., 38., 42., 34., 35., 34., 27., 22., 24., 26., 23., 32., 25., 28., 24., 26., 28.,
31., 27., 29., 25., 26., 29., 25., 3., 12., 20., 20., 30., 23., 38., 23., 34., 21., 41.,
22., 41., 29., 43., 28., 42., 33., 44., 34., 43., 32., 39., 36., 43., 35., 40., 39., 38.,
38., 47., 41., 48., 41., 47., 40., 47., 41., 44., 36., 37., 36., 35., 32., 30., 41., 34.,
43., 38., 40., 36., 39., 35., 41., 36., 35., 4., 37., 25., 41., 6., 39., 17., 22., 17.,
20., 14., 21., 11., 22., 15., 22., 13., 20., 20., 30., 22., 38., 33., 38., 37., 39., 38.,
38., 45., 35., 41., 38., 37., 37., 38., 38., 39., 40., 35., 43., 34., 45., 29., 48., 28.,
47., 26., 39., 33., 47., 27., 43., 29., 44., 31., 46., 28., 42., 34., 34., 38., 4., 35.,
38., 34., 39., 36., 38., 39., 39., 40., 37., 43., 32., 49., 28., 53., 3., 45., 31., 37.,
30., 36., 4., 30., 3., 29., 3., 28., 0., 20., 20., 28., 21., 34., 25., 37., 26., 37., 27.,
38., 30., 35., 26., 42., 29., 45., 27., 43., 31., 45., 32., 39., 29., 35., 33., 31., 33.,
33., 37., 31., 38., 35., 34., 31., 37., 28., 34., 29., 28., 32., 28., 1., 20., 28., 19.,
28., 17., 26., 19., 26., 21., 25., 16., 25., 22., 24., 24., 24., 27., 25., 6., 26., 27.,
25., 25., 18., 32., 20., 33., 21., 27., 3., 24., 20., 24., 5., 26., 22., 18., 13., 19., 5.,
22., 14., 17., 13., 19., 13., 17., 7., 18., 5., 17., 11., 3., 19., 19., 14., 19., 5., 20.,
20., 21., 21., 27., 29., 28., 31., 33., 32., 32., 35., 38., 42., 39., 46., 41., 43., 39.,
43., 31., 42., 31., 35., 31., 36., 31., 34., 37., 34., 35., 33., 37., 34., 37., 41., 38.,
35., 36., 34., 38., 35., 40., 4., 43., 3., 39., 35., 37., 2., 27., 1., 30., 2., 20., 20.,
28., 21., 38., 25., 36., 30., 37., 28., 42., 26., 42., 26., 37., 27., 34., 32., 35., 33.,
35., 36., 39., 37., 34., 38., 36., 37., 39., 38., 43., 39., 32., 35., 40., 31., 34., 32.,
30., 26., 31., 32., 32., 33., 37., 34., 33., 33., 34., 34., 28., 30., 3., 34., 28., 27.,
2., 19., 5., 24., 17., 24., 18., 25., 20., 18., 21., 18., 22., 21., 17., 21., 15., 20.,
15., 26., 25., 17., 25., 18., 14., 26., 16., 26., 6., 28., 3., 23., 17., 23., 24., 20.,
19., 21., 19., 18., 19., 17., 14., 16., 11., 16., 10., 15., 13., 13., 13., 19., 13., 22.,
11., 23., 10., 21., 15., 22., 14., 19., 11., 19., 7., 11., 5., 7., 5., 8., 5., 10., 5., 7.,
5., 10., 5., 10., 3., 10., 3., 8., 1., 10., 0., 20., 20., 22., 21., 30., 26., 32., 36.,
29., 34., 31., 35., 28., 33., 29., 31., 30., 30., 26., 29., 27., 31., 26., 31., 27., 26.,
27., 27., 31., 29., 31., 35., 37., 38., 20., 20., 29., 29., 27., 27., 33., 29., 36., 36.,
39., 3., 33., 7., 34., 31., 44., 4., 42., 30., 40., 39., 35., 37., 39., 3., 32., 3., 20.,
20., 22., 27., 28., 29., 36., 31., 39., 30., 36., 5., 42., 34., 39., 33., 35., 30., 37.,
31., 38., 28., 43., 33., 36., 32., 39., 36., 48., 41., 50., 39., 45., 5., 46., 2., 40.,
35., 44., 34., 44., 3., 42., 4., 44., 33., 43., 2., 36., 36., 44., 30., 41., 32., 29., 42.,
1., 28., 4., 36., 19., 33., 18., 34., 2., 33., 11., 20., 20., 28., 22., 31., 29., 34., 32.,
38., 30., 49., 31., 40., 32., 45., 38., 39., 30., 47., 34., 44., 31., 43., 33., 41., 34.,
39., 32., 36., 37., 42., 37., 41., 43., 38., 40., 38., 39., 35., 38., 37., 40., 36., 38.,
2., 38., 38., 32., 20., 20., 31., 27., 29., 28., 26., 29., 32., 31., 35., 38., 32., 38.,
32., 31., 27., 37., 27., 38., 29., 39., 30., 35., 32., 33., 32., 34., 39., 37., 47., 37.,
52., 41., 46., 36., 44., 42., 40., 44., 34., 44., 39., 36., 40., 37., 39., 5., 20., 20.,
29., 29., 31., 33., 32., 29., 32., 33., 27., 33., 34., 32., 35., 37., 33., 34., 37., 39.,
5., 31., 33., 30., 33., 30., 34., 31., 35., 4., 38., 30., 35., 29., 34., 28., 42., 30.,
34., 26., 36., 26., 30., 32., 33., 2., 32., 24., 30., 30., 33., 24., 34., 22., 30., 20.,
32., 22., 35., 25., 32., 28., 34., 27., 32., 27., 2., 27., 3., 12., 35., 13., 35., 9., 37.,
20., 20., 29., 29., 27., 28., 28., 28., 29., 32., 38., 28., 40., 27., 45., 31., 40., 34.,
42., 31., 35., 42., 37., 39., 38., 38., 42., 39., 39., 38., 42., 36., 41., 43., 34., 26.,
41., 25., 43., 26., 44., 33., 39., 31., 39., 28., 38., 6., 44., 0., 20., 20., 31., 28.,
29., 47., 5., 43., 20., 45., 23., 45., 32., 37., 2., 22., 34., 23., 32., 26., 31., 29.,
29., 32., 30., 30., 26., 25., 4., 33., 26., 31., 30., 35., 30., 35., 4., 35., 29., 38.,
35., 30., 31., 36., 32., 36., 31., 39., 19., 32., 16., 31., 16., 32., 16., 32., 17., 32.,
4., 32., 15., 31., 16., 32., 14., 35., 14., 33., 13., 29., 13., 7., 19., 26., 16., 27.,
12., 27., 13., 25., 4., 32., 10., 5., 13., 24., 10., 23., 15., 21., 13., 22., 6., 27., 12.,
20., 20., 29., 29., 27., 33., 37., 31., 39., 31., 42., 31., 34., 29., 33., 42., 34., 38.,
40., 6., 33., 6., 38., 35., 40., 38., 37., 36., 45., 35., 48., 40., 46., 43., 43., 41.,
52., 5., 38., 27., 29., 21., 27., 24., 36., 3., 24., 19., 0., 20., 20., 27., 27., 33., 28.,
33., 34., 8., 37., 34., 37., 35., 40., 34., 37.,
];
const TOL: f64 = 0.0001;
const P: f64 = 0.999;
let mut quantile = Quantile::new(P);
let mut ckms = quantiles::ckms::CKMS::new(TOL);
for &o in observations.iter() {
quantile.add(o);
ckms.insert(o);
}
let q1 = quantile.quantile();
let (_, q2) = ckms.query(P).unwrap();
assert!((q1 - q2).abs() < 0.3, "{} vs. {}", q1, q2);
}
#[test]
fn percentile_99() {
const TOL: f64 = 0.0001;
let mut q = Quantile::new(0.99);
for _ in 0..100 {
for i in 0..10 {
let f = f64::from(i);
q.add(f);
}
}
assert!((q.quantile() - 9.).abs() < TOL);
}