v2 / vlib / math / stats / stats_test.v
577 lines · 519 sloc · 17.49 KB · 3d60410b605d001e54f280070d5f952da9de1112
Raw
1import math
2import math.stats
3
4fn test_freq() {
5 // Tests were also verified on Wolfram Alpha
6 data := [10.0, 10.0, 5.9, 2.7]
7 mut o := stats.freq(data, 10.0)
8 assert o == 2
9 o = stats.freq(data, 2.7)
10 assert o == 1
11 o = stats.freq(data, 15)
12 assert o == 0
13
14 // test for int, i64, f32 array
15 assert stats.freq[int]([1, 3, 5, 7], 5) == 1
16 assert stats.freq[i64]([i64(1), 3, 5, 7], 5) == 1
17 assert stats.freq[f32]([f32(1.0), 3, 5, 7], 3.0) == 1
18}
19
20fn test_mean() {
21 // Tests were also verified on Wolfram Alpha
22 mut data := [10.0, 4.45, 5.9, 2.7]
23 mut o := stats.mean(data)
24 assert math.alike(o, 5.7625)
25 data = [-3.0, 67.31, 4.4, 1.89]
26 o = stats.mean(data)
27 assert math.alike(o, 17.65)
28 data = [12.0, 7.88, 76.122, 54.83]
29 o = stats.mean(data)
30 assert math.alike(o, 37.708)
31
32 // test for int, i64, f32 array
33 assert stats.mean[int]([1, 2]) == 1
34 assert stats.mean[i64]([i64(1), 2]) == 1
35 o = stats.mean[f32]([f32(1.0), 3, 5, 7])
36 assert math.alike(o, 4.0)
37}
38
39fn test_geometric_mean() {
40 // Tests were also verified on Wolfram Alpha
41 mut data := [10.0, 4.45, 5.9, 2.7]
42 mut o := stats.geometric_mean(data)
43 assert math.alike(o, 5.159931624158176)
44 data = [-3.0, 67.31, 4.4, 1.89]
45 o = stats.geometric_mean(data)
46 assert math.is_nan(o) // Because in math it yields a complex number
47 data = [12.0, 7.88, 76.122, 54.83]
48 o = stats.geometric_mean(data)
49 assert math.alike(o, 25.064495926603378)
50
51 // test for int, i64, f32 array
52 assert stats.geometric_mean[int]([1, 3, 5, 7]) == 3
53 assert stats.geometric_mean[i64]([i64(1), 3, 5, 7]) == 3
54 o = stats.geometric_mean[f32]([f32(1.0), 3, 5, 7])
55 assert math.alike(o, 3.2010858058929443)
56}
57
58fn test_harmonic_mean() {
59 // Tests were also verified on Wolfram Alpha
60 mut data := [10.0, 4.45, 5.9, 2.7]
61 mut o := stats.harmonic_mean(data)
62 assert math.alike(o, 4.626518526616179)
63 data = [-3.0, 67.31, 4.4, 1.89]
64 o = stats.harmonic_mean(data)
65 assert math.alike(o, 9.134577425605814)
66 data = [12.0, 7.88, 76.122, 54.83]
67 o = stats.harmonic_mean(data)
68 assert math.alike(o, 16.555477040152685)
69
70 // test for int, i64, f32 array
71 assert stats.harmonic_mean[int]([1, 2]) == 1
72 assert stats.harmonic_mean[i64]([i64(1), 2]) == 1
73 o = stats.harmonic_mean[f32]([f32(1.0), 3, 5, 7])
74 assert math.alike(o, 2.3863635063171387)
75}
76
77fn test_median() {
78 // Tests were also verified on Wolfram Alpha
79 // Assumes sorted array
80
81 // Even
82 mut data := [2.7, 4.45, 5.9, 10.0]
83 mut o := stats.median(data)
84 assert math.alike(o, 5.175000000000001)
85 data = [-3.0, 1.89, 4.4, 67.31]
86 o = stats.median(data)
87 assert math.alike(o, 3.145)
88 data = [7.88, 12.0, 54.83, 76.122]
89 o = stats.median(data)
90 assert math.alike(o, 33.415)
91
92 // Odd
93 data = [2.7, 4.45, 5.9, 10.0, 22]
94 o = stats.median(data)
95 assert math.alike(o, 5.9)
96 data = [-3.0, 1.89, 4.4, 9, 67.31]
97 o = stats.median(data)
98 assert math.alike(o, 4.4)
99 data = [7.88, 3.3, 12.0, 54.83, 76.122]
100 o = stats.median(data)
101 assert math.alike(o, 12.0)
102
103 // test for int, i64, f32 array
104 assert stats.median[int]([1, 2, 3]) == 2
105 assert stats.median[i64]([i64(1), 2, 3]) == 2
106 o = stats.median[f32]([f32(1.0), 3, 5, 7])
107 assert math.alike(o, 4)
108}
109
110fn test_mode() {
111 // Tests were also verified on Wolfram Alpha
112 mut data := [2.7, 2.7, 4.45, 5.9, 10.0]
113 mut o := stats.mode(data)
114 assert math.alike(o, 2.7)
115 data = [-3.0, 1.89, 1.89, 1.89, 9, 4.4, 4.4, 9, 67.31]
116 o = stats.mode(data)
117 assert math.alike(o, 1.89)
118 // Testing greedy nature
119 data = [2.0, 4.0, 2.0, 4.0]
120 o = stats.mode(data)
121 assert math.alike(o, 2.0)
122
123 // test for int, i64, f32 array
124 assert stats.mode[int]([1, 2, 3, 1]) == 1
125 assert stats.mode[i64]([i64(1), 2, 3, 1]) == 1
126 o = stats.mode[f32]([f32(1.0), 3, 5, 7, 3])
127 assert math.alike(o, 3)
128}
129
130fn test_rms() {
131 // Tests were also verified on Wolfram Alpha
132 mut data := [10.0, 4.45, 5.9, 2.7]
133 mut o := stats.rms(data)
134 assert math.alike(o, 6.362045661577729)
135 data = [-3.0, 67.31, 4.4, 1.89]
136 o = stats.rms(data)
137 assert math.alike(o, 33.77339263384714)
138 data = [12.0, 7.88, 76.122, 54.83]
139 o = stats.rms(data)
140 assert math.alike(o, 47.45256100570337)
141
142 // test for int, i64, f32 array
143 assert stats.rms[int]([1, 2, 3, 1]) == 1
144 assert stats.rms[i64]([i64(1), 2, 3, 1]) == 1
145 o = stats.rms[f32]([f32(1.0), 3, 5, 7, 3])
146 assert math.alike(o, 4.312771797180176)
147}
148
149fn test_population_variance() {
150 // Tests were also verified on Wolfram Alpha
151 mut data := [10.0, 4.45, 5.9, 2.7]
152 mut o := stats.population_variance(data)
153 assert math.alike(o, 7.269218749999999)
154 data = [-3.0, 67.31, 4.4, 1.89]
155 o = stats.population_variance(data)
156 assert math.alike(o, 829.119550)
157 data = [12.0, 7.88, 76.122, 54.83]
158 o = stats.population_variance(data)
159 assert math.alike(o, 829.852282)
160
161 // test for int, i64, f32 array
162 assert stats.population_variance[int]([1, 2, 3, 1]) == 1
163 assert stats.population_variance[i64]([i64(1), 2, 3, 1]) == 1
164 o = stats.population_variance[f32]([f32(1.0), 3, 5, 7, 3])
165 assert math.alike(o, 4.159999847412109)
166}
167
168fn test_sample_variance() {
169 // Tests were also verified on Wolfram Alpha
170 mut data := [10.0, 4.45, 5.9, 2.7]
171 mut o := stats.sample_variance(data)
172 assert math.alike(o, 9.692291666666666)
173 data = [-3.0, 67.31, 4.4, 1.89]
174 o = stats.sample_variance(data)
175 assert math.alike(o, 1105.4927333333333)
176 data = [12.0, 7.88, 76.122, 54.83]
177 o = stats.sample_variance(data)
178 assert math.alike(o, 1106.4697093333332)
179
180 // test for int, i64, f32 array
181 assert stats.sample_variance[int]([1, 2, 3, 1]) == 1
182 assert stats.sample_variance[i64]([i64(1), 2, 3, 1]) == 1
183 o = stats.sample_variance[f32]([f32(1.0), 3, 5, 7, 3])
184 assert math.alike(o, 5.199999809265137)
185}
186
187fn test_population_stddev() {
188 // Tests were also verified on Wolfram Alpha
189 mut data := [10.0, 4.45, 5.9, 2.7]
190 mut o := stats.population_stddev(data)
191 assert math.alike(o, 2.6961488738569312)
192 data = [-3.0, 67.31, 4.4, 1.89]
193 o = stats.population_stddev(data)
194 assert math.alike(o, 28.794436094495754)
195 data = [12.0, 7.88, 76.122, 54.83]
196 o = stats.population_stddev(data)
197 assert math.alike(o, 28.80715678438259)
198
199 // test for int, i64, f32 array
200 assert stats.population_stddev[int]([1, 2, 3, 1]) == 1
201 assert stats.population_stddev[i64]([i64(1), 2, 3, 1]) == 1
202 o = stats.population_stddev[f32]([f32(1.0), 3, 5, 7, 3])
203 assert math.alike(o, 2.0396077632904053)
204}
205
206fn test_sample_stddev() {
207 // Tests were also verified on Wolfram Alpha
208 mut data := [10.0, 4.45, 5.9, 2.7]
209 mut o := stats.sample_stddev(data)
210 assert math.alike(o, 3.1132445561932114)
211 data = [-3.0, 67.31, 4.4, 1.89]
212 o = stats.sample_stddev(data)
213 assert math.alike(o, 33.2489508606412)
214 data = [12.0, 7.88, 76.122, 54.83]
215 o = stats.sample_stddev(data)
216 assert math.alike(o, 33.26363944810208)
217
218 // test for int, i64, f32 array
219 assert stats.sample_stddev[int]([1, 2, 3, 1]) == 1
220 assert stats.sample_stddev[i64]([i64(1), 2, 3, 1]) == 1
221 o = stats.sample_stddev[f32]([f32(1.0), 3, 5, 7, 3])
222 assert math.alike(o, 2.280350923538208)
223}
224
225fn test_absdev() {
226 // Tests were also verified on Wolfram Alpha
227 mut data := [10.0, 4.45, 5.9, 2.7]
228 mut o := stats.absdev(data)
229 assert o == 2.1875
230 assert math.alike(o, 2.1875)
231 data = [-3.0, 67.31, 4.4, 1.89]
232 o = stats.absdev(data)
233 assert o == 24.830000000000002
234 assert math.alike(o, 24.830000000000002)
235 data = [12.0, 7.88, 76.122, 54.83]
236 o = stats.absdev(data)
237 assert o == 27.768
238 assert math.alike(o, 27.768)
239
240 // test for int, i64, f32 array
241 assert stats.absdev[int]([1, 2, 3, 1]) == 0
242 assert stats.absdev[i64]([i64(1), 2, 3, 1]) == 0
243 o = stats.absdev[f32]([f32(1.0), 3, 5, 7, 3])
244 assert math.alike(o, 1.7599999904632568)
245}
246
247fn test_tss() {
248 mut data := [10.0, 4.45, 5.9, 2.7]
249 mut o := stats.tss(data)
250 assert math.alike(o, 29.076874999999998)
251 data = [-3.0, 67.31, 4.4, 1.89]
252 o = stats.tss(data)
253 assert math.alike(o, 3316.4782)
254 data = [12.0, 7.88, 76.122, 54.83]
255 o = stats.tss(data)
256 assert math.alike(o, 3319.409128)
257
258 // test for int, i64, f32 array
259 assert stats.tss[int]([1, 2, 3, 1]) == 5
260 assert stats.tss[i64]([i64(1), 2, 3, 1]) == 5
261 o = stats.tss[f32]([f32(1.0), 3, 5, 7, 3])
262 assert math.alike(o, 20.799999237060547)
263}
264
265fn test_min() {
266 // Tests were also verified on Wolfram Alpha
267 mut data := [10.0, 4.45, 5.9, 2.7]
268 mut o := stats.min(data)
269 assert math.alike(o, 2.7)
270 data = [-3.0, 67.31, 4.4, 1.89]
271 o = stats.min(data)
272 assert math.alike(o, -3.0)
273 data = [12.0, 7.88, 76.122, 54.83]
274 o = stats.min(data)
275 assert math.alike(o, 7.88)
276
277 // test for int, i64, f32 array
278 assert stats.min[int]([1, 2, 3, 1]) == 1
279 assert stats.min[i64]([i64(1), 2, 3, 1]) == 1
280 o = stats.min[f32]([f32(1.0), 3, 5, 7, 3])
281 assert math.alike(o, 1.0)
282}
283
284fn test_max() {
285 // Tests were also verified on Wolfram Alpha
286 mut data := [10.0, 4.45, 5.9, 2.7]
287 mut o := stats.max(data)
288 assert math.alike(o, 10.0)
289 data = [-3.0, 67.31, 4.4, 1.89]
290 o = stats.max(data)
291 assert math.alike(o, 67.31)
292 data = [12.0, 7.88, 76.122, 54.83]
293 o = stats.max(data)
294 assert math.alike(o, 76.122)
295
296 // test for int, i64, f32 array
297 assert stats.max[int]([1, 2, 3, 1]) == 3
298 assert stats.max[i64]([i64(1), 2, 3, 1]) == 3
299 o = stats.max[f32]([f32(1.0), 3, 5, 7, 3])
300 assert math.alike(o, 7.0)
301}
302
303fn test_minmax() {
304 // Tests were also verified on Wolfram Alpha
305 mut data := [10.0, 4.45, 5.9, 2.7]
306 mut o_min, mut o_max := stats.minmax(data)
307 assert [o_min, o_max] == [2.7, 10.0]
308 data = [-3.0, 67.31, 4.4, 1.89]
309 o_min, o_max = stats.minmax(data)
310 assert [o_min, o_max] == [-3.0, 67.31]
311 data = [12.0, 7.88, 76.122, 54.83]
312 o_min, o_max = stats.minmax(data)
313 assert [o_min, o_max] == [7.88, 76.122]
314
315 // test for int, i64, f32 array
316 o_min_int, o_max_int := stats.minmax[int]([1, 2, 3, 1])
317 assert [o_min_int, o_max_int] == [1, 3]
318 o_min_i64, o_max_i64 := stats.minmax[i64]([i64(1), 2, 3, 1])
319 assert [o_min_i64, o_max_i64] == [i64(1), 3]
320 o_min_f32, o_max_f32 := stats.minmax[f32]([f32(1.0), 3, 5, 7, 3])
321 assert [o_min_f32, o_max_f32] == [f32(1.0), 7]
322}
323
324fn test_min_index() {
325 // Tests were also verified on Wolfram Alpha
326 mut data := [10.0, 4.45, 5.9, 2.7]
327 mut o := stats.min_index(data)
328 assert o == 3
329 data = [-3.0, 67.31, 4.4, 1.89]
330 o = stats.min_index(data)
331 assert o == 0
332 data = [12.0, 7.88, 76.122, 54.83]
333 o = stats.min_index(data)
334 assert o == 1
335
336 // test for int, i64, f32 array
337 assert stats.min_index[int]([1, 2, 3, 1]) == 0
338 assert stats.min_index[i64]([i64(1), 2, 3, 1]) == 0
339 assert stats.min_index[f32]([f32(1.0), 3, 5, 7, 3]) == 0
340}
341
342fn test_max_index() {
343 // Tests were also verified on Wolfram Alpha
344 mut data := [10.0, 4.45, 5.9, 2.7]
345 mut o := stats.max_index(data)
346 assert o == 0
347 data = [-3.0, 67.31, 4.4, 1.89]
348 o = stats.max_index(data)
349 assert o == 1
350 data = [12.0, 7.88, 76.122, 54.83]
351 o = stats.max_index(data)
352 assert o == 2
353
354 // test for int, i64, f32 array
355 assert stats.max_index[int]([1, 2, 3, 1]) == 2
356 assert stats.max_index[i64]([i64(1), 2, 3, 1]) == 2
357 assert stats.max_index[f32]([f32(1.0), 3, 5, 7, 3]) == 3
358}
359
360fn test_minmax_index() {
361 // Tests were also verified on Wolfram Alpha
362 mut data := [10.0, 4.45, 5.9, 2.7]
363 mut o_min, mut o_max := stats.minmax_index(data)
364 assert [o_min, o_max] == [3, 0]
365 data = [-3.0, 67.31, 4.4, 1.89]
366 o_min, o_max = stats.minmax_index(data)
367 assert [o_min, o_max] == [0, 1]
368 data = [12.0, 7.88, 76.122, 54.83]
369 o_min, o_max = stats.minmax_index(data)
370 assert [o_min, o_max] == [1, 2]
371
372 // test for int, i64, f32 array
373 o_min, o_max = stats.minmax_index[int]([1, 2, 3, 1])
374 assert [o_min, o_max] == [0, 2]
375 o_min, o_max = stats.minmax_index[i64]([i64(1), 2, 3, 1])
376 assert [o_min, o_max] == [0, 2]
377 o_min, o_max = stats.minmax_index[f32]([f32(1.0), 3, 5, 7, 3])
378 assert [o_min, o_max] == [0, 3]
379}
380
381fn test_range() {
382 // Tests were also verified on Wolfram Alpha
383 mut data := [10.0, 4.45, 5.9, 2.7]
384 mut o := stats.range(data)
385 assert math.alike(o, 7.3)
386 data = [-3.0, 67.31, 4.4, 1.89]
387 o = stats.range(data)
388 assert math.alike(o, 70.31)
389 data = [12.0, 7.88, 76.122, 54.83]
390 o = stats.range(data)
391 assert math.alike(o, 68.242)
392
393 // test for int, i64, f32 array
394 assert stats.range[int]([1, 2, 3, 1]) == 2
395 assert stats.range[i64]([i64(1), 2, 3, 1]) == 2
396 assert stats.range[f32]([f32(1.0), 3, 5, 7, 3]) == 6.0
397}
398
399fn test_covariance() {
400 mut data0 := [10.0, 4.45, 5.9, 2.7]
401 mut data1 := [5.0, 14.45, -15.9, 22.7]
402 mut o := stats.covariance(data0, data1)
403 assert math.alike(o, -17.37078125)
404 data0 = [-3.0, 67.31, 4.4, 1.89]
405 data1 = [5.0, 77.31, 44.4, 11.89]
406 o = stats.covariance(data0, data1)
407 assert math.alike(o, 740.06955)
408 data0 = [12.0, 7.88, 76.122, 54.83]
409 data1 = [2.0, 5.88, 7.122, 5.83]
410 o = stats.covariance(data0, data1)
411 assert math.alike(o, 36.650282000000004)
412
413 // test for int, i64, f32 array
414 data0_int := [1, 2, 3, 1]
415 data1_int := [11, 22, 33, 11]
416 o_int := stats.covariance[int](data0_int, data1_int)
417 assert o_int == 8
418 data0_i64 := [i64(1), 2, 3, 1]
419 data1_i64 := [i64(11), 22, 33, 11]
420 o_i64 := stats.covariance[i64](data0_i64, data1_i64)
421 assert o_i64 == 8
422 data0_f32 := [f32(1.0), 2, 3, 1]
423 data1_f32 := [f32(11.0), 22, 33, 11]
424 o_f32 := stats.covariance[f32](data0_f32, data1_f32)
425 assert math.alike(o_f32, 7.562500476837158)
426}
427
428fn test_lag1_autocorrelation() {
429 mut data := [10.0, 4.45, 5.9, 2.7]
430 mut o := stats.lag1_autocorrelation(data)
431 mut e := 0.0
432 assert math.alike(o, -0.5542285481446095)
433 data = [-3.0, 67.31, 4.4, 1.89]
434 o = stats.lag1_autocorrelation(data)
435 assert math.alike(o, -0.5102510654033415)
436 data = [12.0, 7.88, 76.122, 54.83]
437 o = stats.lag1_autocorrelation(data)
438 e = 0.10484450460892072
439 assert math.alike(o, e), diff(o, e)
440
441 // test for int, i64, f32 array
442 assert stats.lag1_autocorrelation[int]([1, 2, 3, 1]) == 0
443 assert stats.lag1_autocorrelation[i64]([i64(1), 2, 3, 1]) == 0
444 o = stats.lag1_autocorrelation[f32]([f32(1.0), 3, 5, 7, 3])
445 assert math.alike(o, 0.1975308507680893)
446}
447
448fn diff(actual f64, expected f64) string {
449 return '\n actual:${actual:40.35f}\nexpected:${expected:40.35f}\n diff:${actual - expected:40.35f}'
450}
451
452fn test_kurtosis() {
453 mut data := [10.0, 4.45, 5.9, 2.7]
454 mut o := stats.kurtosis(data)
455 mut e := -1.0443212849233845
456 assert math.close(o, e), diff(o, e)
457 data = [-3.0, 67.31, 4.4, 1.89]
458 o = stats.kurtosis(data)
459 e = -0.6884953374814851
460 assert math.close(o, e), diff(o, e)
461 data = [12.0, 7.88, 76.122, 54.83]
462 o = stats.kurtosis(data)
463 assert math.alike(o, -1.7323772836921467)
464
465 // test for int, i64, f32 array
466 assert stats.kurtosis[int]([1, 2, 3, 1]) == 1
467 assert stats.kurtosis[i64]([i64(1), 2, 3, 1]) == 1
468 o = stats.kurtosis[f32]([f32(1.0), 3, 5, 7, 3])
469 e = -1.044378399848938
470 assert math.alike(o, e), diff(o, e)
471}
472
473fn test_skew() {
474 mut data := [10.0, 4.45, 5.9, 2.7]
475 mut o := stats.skew(data)
476 mut e := 0.5754021106320453
477 assert math.veryclose(o, e), diff(o, e)
478 data = [-3.0, 67.31, 4.4, 1.89]
479 o = stats.skew(data)
480 e = 1.1248733711136492
481 assert math.veryclose(o, e), diff(o, e)
482 data = [12.0, 7.88, 76.122, 54.83]
483 o = stats.skew(data)
484 e = 0.19007911706827735
485 assert math.alike(o, e), diff(o, e)
486
487 // test for int, i64, f32 array
488 assert stats.skew[int]([1, 2, 3, 1]) == 2
489 assert stats.skew[i64]([i64(1), 2, 3, 1]) == 2
490 o = stats.skew[f32]([f32(1.0), 3, 5, 7, 3])
491 e = 0.27154541015625
492 assert math.alike(o, e), diff(o, e)
493}
494
495fn test_quantile() {
496 // Assumes sorted array
497
498 mut data := [2.7, 4.45, 5.9, 10.0]
499 mut o := stats.quantile(data, 0.1)!
500 assert math.alike(o, 3.225)
501 data = [-3.0, 1.89, 4.4, 67.31]
502 o = stats.quantile(data, 0.2)!
503 assert math.alike(o, -0.06599999999999961)
504 data = [7.88, 12.0, 54.83, 76.122]
505 o = stats.quantile(data, 0.3)!
506 assert math.alike(o, 11.588)
507
508 stats.quantile(data, -0.3) or { assert err.msg() == 'index out of range' }
509
510 stats.quantile(data, 2) or { assert err.msg() == 'index out of range' }
511
512 // test for int, i64, f32 array
513 assert stats.quantile[int]([1, 2, 3], 1)! == 3
514 assert stats.quantile[i64]([i64(1), 2, 3], 1)! == 3
515 o = stats.quantile[f32]([f32(1.0), 3, 5, 7], 0.22)!
516 assert math.alike(o, 2.319999933242798)
517}
518
519fn test_passing_empty() {
520 data := []f64{}
521 assert stats.freq(data, 0) == 0
522 assert stats.mean(data) == 0
523 assert stats.geometric_mean(data) == 0
524 assert stats.harmonic_mean(data) == 0
525 assert stats.median(data) == 0
526 assert stats.mode(data) == 0
527 assert stats.rms(data) == 0
528 assert stats.population_variance(data) == 0
529 assert stats.sample_variance(data) == 0
530 assert stats.population_stddev(data) == 0
531 assert stats.sample_stddev(data) == 0
532 assert stats.absdev(data) == 0
533 assert stats.min(data) == 0
534 assert stats.max(data) == 0
535 o_min, o_max := stats.minmax(data)
536 assert [o_min, o_max] == [f64(0), 0]
537 assert stats.min_index(data) == 0
538 assert stats.max_index(data) == 0
539 o_min_index, o_max_index := stats.minmax_index(data)
540 assert [o_min_index, o_max_index] == [0, 0]
541 assert stats.range(data) == 0
542 assert stats.covariance(data, data) == 0
543 assert stats.lag1_autocorrelation(data) == 0
544 assert stats.kurtosis(data) == 0
545 assert stats.skew(data) == 0
546 assert stats.quantile(data, 0)! == 0
547}
548
549fn test_passing_one() {
550 data := [100.0]
551 assert stats.freq(data, 100.0) == 1
552 assert stats.mean(data) == 100.0
553 assert stats.geometric_mean(data) == 100.0
554 assert stats.harmonic_mean(data) == 100.0
555 assert stats.median(data) == 100.0
556 assert stats.mode(data) == 100.0
557 assert stats.rms(data) == 100.0
558 assert stats.population_variance(data) == 0.0
559 assert math.is_nan(stats.sample_variance(data))
560 assert stats.population_stddev(data) == 0.0
561 assert math.is_nan(stats.sample_stddev(data))
562 assert stats.absdev(data) == 0.0
563 assert stats.min(data) == 100.0
564 assert stats.max(data) == 100.0
565 o_min, o_max := stats.minmax(data)
566 assert [o_min, o_max] == [f64(100), 100]
567 assert stats.min_index(data) == 0
568 assert stats.max_index(data) == 0
569 o_min_index, o_max_index := stats.minmax_index(data)
570 assert [o_min_index, o_max_index] == [0, 0]
571 assert stats.range(data) == 0
572 assert stats.covariance(data, data) == 0
573 assert math.is_nan(stats.lag1_autocorrelation(data))
574 assert math.is_nan(stats.kurtosis(data))
575 assert math.is_nan(stats.skew(data))
576 assert stats.quantile(data, 0)! == 100
577}
578