peck_lib/
tests.rs

1#[test]
2fn test_split_f64() {
3    {
4        let (lhs, rhs) = crate::f64::split(crate::f64::consts::RAD_TO_DEG);
5        assert_eq!(lhs, 57.0);
6        assert!(crate::f64::approx_equal_f64(rhs, 0.29577951308232, 13));
7    }
8    {
9        let (lhs, rhs) = crate::f64::split(-crate::f64::consts::RAD_TO_DEG);
10        assert_eq!(lhs, -57.0);
11        println!("rhs: {}", rhs);
12        assert!(crate::f64::approx_equal_f64(rhs, -0.29577951308232, 13));
13    }
14}
15
16#[test]
17fn test_split_f32() {
18    {
19        let (lhs, rhs) = crate::f32::split(crate::f32::consts::RAD_TO_DEG);
20        assert_eq!(lhs, 57.0);
21        assert!(crate::f32::approx_equal_f32(rhs, 0.29578, 5));
22    }
23    {
24        let (lhs, rhs) = crate::f32::split(-crate::f32::consts::RAD_TO_DEG);
25        assert_eq!(lhs, -57.0);
26        assert!(crate::f32::approx_equal_f32(rhs, -0.29578, 5));
27    }
28}
29
30#[test]
31fn test_split_abs_f64() {
32    {
33        let (lhs, rhs) = crate::f64::split_abs(crate::f64::consts::RAD_TO_DEG);
34        assert_eq!(lhs, 57.0);
35        assert!(crate::f64::approx_equal_f64(rhs, 0.29577951308232, 13));
36    }
37    {
38        let (lhs, rhs) = crate::f64::split_abs(-crate::f64::consts::RAD_TO_DEG);
39        assert_eq!(lhs, 57.0);
40        println!("{}", rhs);
41        assert!(crate::f64::approx_equal_f64(rhs, 0.29577951308232, 13));
42    }
43}
44
45#[test]
46fn test_split_abs_f32() {
47    {
48        let (lhs, rhs) = crate::f32::split_abs(crate::f32::consts::RAD_TO_DEG);
49        assert_eq!(lhs, 57.0);
50        assert!(crate::f32::approx_equal_f32(rhs, 0.29578, 5));
51    }
52    {
53        let (lhs, rhs) = crate::f32::split_abs(-crate::f32::consts::RAD_TO_DEG);
54        assert_eq!(lhs, 57.0);
55        assert!(crate::f32::approx_equal_f32(rhs, 0.29578, 5));
56    }
57}
58
59#[test]
60fn test_to_radians_f64() {
61    let input: f64 = 100.0; //100.0000000003249
62    assert_eq!(input.to_radians(), crate::f64::to_radians(input));
63    assert_eq!(crate::f64::to_radians(input), 1.7453292519943295);
64    assert_eq!(crate::f64::to_radians(-input), -1.7453292519943295);
65}
66
67#[test]
68fn test_to_radians_f32() {
69    let input: f32 = 100.0; //100.0000000003249
70    assert_eq!(crate::f32::to_radians(input), input.to_radians());
71    assert_eq!(crate::f32::to_radians(input), 1.7453293);
72    assert_eq!(crate::f32::to_radians(-input), -1.7453293);
73}
74
75#[test]
76fn test_to_degrees_f64() {
77    let num: f64 = 1.745329252;
78    assert_eq!(num.to_degrees(), crate::f64::to_degrees(num));
79    assert_eq!(crate::f64::to_degrees(num), 100.0000000003249);
80    assert_eq!(crate::f64::to_degrees(-num), -100.0000000003249);
81}
82
83#[test]
84fn test_to_degrees_f32() {
85    let num: f32 = 1.7453293;
86    assert_eq!(num.to_degrees(), crate::f32::to_degrees(num));
87    assert_eq!(crate::f32::to_degrees(num), 100.0000000003249);
88    assert_eq!(crate::f32::to_degrees(-num), -100.0000000003249);
89}
90
91#[test]
92fn test_normalise_f64() {
93    assert_eq!(
94        crate::f64::normalise(
95            crate::f64::consts::ARC_SECONDS_IN_360_DEGREES / 2.0,
96            0.0,
97            crate::f64::consts::ARC_SECONDS_IN_360_DEGREES
98        ),
99        0.5
100    );
101    assert_eq!(
102        crate::f64::normalise(
103            crate::f64::consts::ARC_SECONDS_IN_360_DEGREES,
104            0.0,
105            crate::f64::consts::ARC_SECONDS_IN_360_DEGREES
106        ),
107        1.0
108    );
109    assert_eq!(
110        crate::f64::normalise(0.0, 0.0, crate::f64::consts::ARC_SECONDS_IN_360_DEGREES),
111        0.0
112    );
113}
114
115#[test]
116fn test_normalise_f32() {
117    assert_eq!(
118        crate::f32::normalise(
119            crate::f32::consts::ARC_SECONDS_IN_360_DEGREES / 2.0,
120            0.0,
121            crate::f32::consts::ARC_SECONDS_IN_360_DEGREES
122        ),
123        0.5
124    );
125    assert_eq!(
126        crate::f32::normalise(
127            crate::f32::consts::ARC_SECONDS_IN_360_DEGREES,
128            0.0,
129            crate::f32::consts::ARC_SECONDS_IN_360_DEGREES
130        ),
131        1.0
132    );
133    assert_eq!(
134        crate::f32::normalise(0.0, 0.0, crate::f32::consts::ARC_SECONDS_IN_360_DEGREES),
135        0.0
136    );
137}
138
139#[test]
140fn test_normalised_to_index_f64() {
141    assert_eq!(
142        crate::f64::normalised_to_index(
143            crate::f64::normalise(
144                crate::f64::indexify_lat(-90.0) * 60.0 * 60.0,
145                0.0,
146                crate::f64::consts::ARC_SECONDS_IN_180_DEGREES
147            ),
148            crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
149        ),
150        0
151    );
152    assert_eq!(
153        crate::f64::normalised_to_index(
154            crate::f64::normalise(
155                crate::f64::indexify_lat(0.0) * 60.0 * 60.0,
156                0.0,
157                crate::f64::consts::ARC_SECONDS_IN_180_DEGREES
158            ),
159            crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
160        ),
161        crate::usize::consts::ARC_SECONDS_IN_180_DEGREES / 2
162    );
163    assert_eq!(
164        crate::f64::normalised_to_index(
165            crate::f64::normalise(
166                crate::f64::indexify_lat(90.0) * 60.0 * 60.0,
167                0.0,
168                crate::f64::consts::ARC_SECONDS_IN_180_DEGREES
169            ),
170            crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
171        ),
172        crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
173    );
174}
175
176#[test]
177fn test_normalised_to_index_f32() {
178    assert_eq!(
179        crate::f32::normalised_to_index(
180            crate::f32::normalise(
181                crate::f32::indexify_lat(-90.0) * 60.0 * 60.0,
182                0.0,
183                crate::f32::consts::ARC_SECONDS_IN_180_DEGREES
184            ),
185            crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
186        ),
187        0
188    );
189    assert_eq!(
190        crate::f32::normalised_to_index(
191            crate::f32::normalise(
192                crate::f32::indexify_lat(0.0) * 60.0 * 60.0,
193                0.0,
194                crate::f32::consts::ARC_SECONDS_IN_180_DEGREES
195            ),
196            crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
197        ),
198        crate::usize::consts::ARC_SECONDS_IN_180_DEGREES / 2
199    );
200    assert_eq!(
201        crate::f32::normalised_to_index(
202            crate::f32::normalise(
203                crate::f32::indexify_lat(90.0) * 60.0 * 60.0,
204                0.0,
205                crate::f32::consts::ARC_SECONDS_IN_180_DEGREES
206            ),
207            crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
208        ),
209        crate::usize::consts::ARC_SECONDS_IN_180_DEGREES
210    );
211}
212
213#[test]
214fn test_indexify_lat_f64() {
215    assert_eq!(crate::f64::indexify_lat(-90.0), 0.0);
216    assert_eq!(crate::f64::indexify_lat(0.0), 90.0);
217    assert_eq!(crate::f64::indexify_lat(90.0), 180.0);
218}
219
220#[test]
221fn test_indexify_lat_f32() {
222    assert_eq!(crate::f32::indexify_lat(-90.0), 0.0);
223    assert_eq!(crate::f32::indexify_lat(0.0), 90.0);
224    assert_eq!(crate::f32::indexify_lat(90.0), 180.0);
225}
226
227#[test]
228fn test_indexify_long_f64() {
229    assert_eq!(crate::f64::indexify_long(-180.0), 0.0);
230    assert_eq!(crate::f64::indexify_long(0.0), 180.0);
231    assert_eq!(crate::f64::indexify_long(180.0), 360.0);
232}
233
234#[test]
235fn test_indexify_long_f32() {
236    assert_eq!(crate::f32::indexify_long(-180.0), 0.0);
237    assert_eq!(crate::f32::indexify_long(0.0), 180.0);
238    assert_eq!(crate::f32::indexify_long(180.0), 360.0);
239}
240
241#[test]
242fn test_indexify_lat_long_f64() {
243    assert_eq!(crate::f64::indexify_lat_long(-90.0, -180.0), (0.0, 0.0));
244    assert_eq!(crate::f64::indexify_lat_long(0.0, 0.0), (90.0, 180.0));
245    assert_eq!(crate::f64::indexify_lat_long(90.0, 180.0), (180.0, 360.0));
246}
247
248#[test]
249fn test_indexify_lat_long_f32() {
250    assert_eq!(crate::f32::indexify_lat_long(-90.0, -180.0), (0.0, 0.0));
251    assert_eq!(crate::f32::indexify_lat_long(0.0, 0.0), (90.0, 180.0));
252    assert_eq!(crate::f32::indexify_lat_long(90.0, 180.0), (180.0, 360.0));
253}
254
255#[test]
256fn test_trunc_f64() {
257    assert_eq!(
258        crate::f64::trunc(crate::f64::consts::RAD_TO_DEG, 19),
259        crate::f64::consts::RAD_TO_DEG
260    );
261    assert_eq!(
262        crate::f64::trunc(-crate::f64::consts::RAD_TO_DEG, 19),
263        -crate::f64::consts::RAD_TO_DEG
264    );
265    assert_eq!(crate::f64::trunc(crate::f64::consts::RAD_TO_DEG, 0), 57.0);
266    assert_eq!(crate::f64::trunc(-crate::f64::consts::RAD_TO_DEG, 0), -57.0);
267}
268
269#[test]
270fn test_trunc_f32() {
271    assert_eq!(
272        crate::f32::trunc(crate::f32::consts::RAD_TO_DEG, 19),
273        crate::f32::consts::RAD_TO_DEG
274    );
275    assert_eq!(
276        crate::f32::trunc(-crate::f32::consts::RAD_TO_DEG, 19),
277        -crate::f32::consts::RAD_TO_DEG
278    );
279    assert_eq!(crate::f32::trunc(crate::f32::consts::RAD_TO_DEG, 0), 57.0);
280    assert_eq!(crate::f32::trunc(-crate::f32::consts::RAD_TO_DEG, 0), -57.0);
281}
282
283#[test]
284#[should_panic]
285fn test_trunc_f64_should_error() {
286    crate::f64::trunc(crate::f64::consts::RAD_TO_DEG, 20);
287    crate::f64::trunc(-crate::f64::consts::RAD_TO_DEG, 20);
288}
289
290#[test]
291#[should_panic]
292fn test_trunc_f32_should_error() {
293    crate::f32::trunc(crate::f32::consts::RAD_TO_DEG, 20);
294    crate::f32::trunc(-crate::f32::consts::RAD_TO_DEG, 20);
295}
296
297#[test]
298fn test_truct_safe_f64() {
299    {
300        let output: Result<f64, crate::error::Warning> =
301            crate::f64::trunc_safe(crate::f64::consts::RAD_TO_DEG, 19);
302        assert!(output.is_ok());
303        if let Ok(output) = output {
304            assert_eq!(output, crate::f64::consts::RAD_TO_DEG);
305        } else {
306            panic!();
307        }
308    }
309    {
310        let output: Result<f64, crate::error::Warning> =
311            crate::f64::trunc_safe(-crate::f64::consts::RAD_TO_DEG, 19);
312        assert!(output.is_ok());
313        if let Ok(output) = output {
314            assert_eq!(output, -crate::f64::consts::RAD_TO_DEG);
315        } else {
316            panic!();
317        }
318    }
319    {
320        let output: Result<f64, crate::error::Warning> =
321            crate::f64::trunc_safe(crate::f64::consts::RAD_TO_DEG, 6);
322        assert!(output.is_ok());
323        if let Ok(output) = output {
324            assert_eq!(output, 57.295779);
325        } else {
326            panic!();
327        }
328    }
329    {
330        let output: Result<f64, crate::error::Warning> =
331            crate::f64::trunc_safe(-crate::f64::consts::RAD_TO_DEG, 6);
332        assert!(output.is_ok());
333        if let Ok(output) = output {
334            assert_eq!(output, -57.295779);
335        } else {
336            panic!();
337        }
338    }
339    {
340        let output: Result<f64, crate::error::Warning> =
341            crate::f64::trunc_safe(crate::f64::consts::RAD_TO_DEG, 20);
342        assert!(output.is_err());
343        if let Err(crate::error::Warning::F64(output, message)) = output {
344            assert_eq!(output, crate::f64::consts::RAD_TO_DEG);
345            println!("Intentional warning message: \"{}\"", message);
346        } else {
347            panic!();
348        }
349    }
350}
351
352#[test]
353fn test_truct_safe_f32() {
354    {
355        let output: Result<f32, crate::error::Warning> =
356            crate::f32::trunc_safe(crate::f32::consts::RAD_TO_DEG, 19);
357        assert!(output.is_ok());
358        if let Ok(output) = output {
359            assert_eq!(output, crate::f32::consts::RAD_TO_DEG);
360        } else {
361            panic!();
362        }
363    }
364    {
365        let output: Result<f32, crate::error::Warning> =
366            crate::f32::trunc_safe(-crate::f32::consts::RAD_TO_DEG, 19);
367        assert!(output.is_ok());
368        if let Ok(output) = output {
369            assert_eq!(output, -crate::f32::consts::RAD_TO_DEG);
370        } else {
371            panic!();
372        }
373    }
374    {
375        let output: Result<f32, crate::error::Warning> =
376            crate::f32::trunc_safe(crate::f32::consts::RAD_TO_DEG, 4);
377        assert!(output.is_ok());
378        if let Ok(output) = output {
379            assert_eq!(output, 57.2957);
380        } else {
381            panic!();
382        }
383    }
384    {
385        let output: Result<f32, crate::error::Warning> =
386            crate::f32::trunc_safe(-crate::f32::consts::RAD_TO_DEG, 4);
387        assert!(output.is_ok());
388        if let Ok(output) = output {
389            assert_eq!(output, -57.2957);
390        } else {
391            panic!();
392        }
393    }
394    {
395        let output: Result<f32, crate::error::Warning> =
396            crate::f32::trunc_safe(crate::f32::consts::RAD_TO_DEG, 20);
397        assert!(output.is_err());
398        if let Err(crate::error::Warning::F32(output, message)) = output {
399            assert_eq!(output, crate::f32::consts::RAD_TO_DEG);
400            println!("Intentional warning message: \"{}\"", message);
401        } else {
402            panic!();
403        }
404    }
405}
406
407#[test]
408fn test_trunc_exact_f64() {
409    assert_eq!(
410        crate::f64::trunc_exact(-0.2957795130823209, 18),
411        -0.2957795130823209
412    );
413    assert_eq!(
414        crate::f64::trunc_exact(-0.2957795130823209, 16),
415        -0.2957795130823209
416    );
417    assert_eq!(
418        crate::f64::trunc_exact(-0.2957795130823209, 14),
419        -0.29577951308232
420    );
421}
422
423#[test]
424fn test_trunc_exact_f32() {
425    assert_eq!(crate::f32::trunc_exact(-0.29577953, 8), -0.29577953);
426    assert_eq!(crate::f32::trunc_exact(-0.29577953, 6), -0.295779);
427    assert_eq!(crate::f32::trunc_exact(-0.29577953, 4), -0.2957);
428}
429
430#[test]
431fn test_two_times_pi_equals_pi_plus_pi_f64() {
432    assert_eq!(
433        std::f64::consts::PI + std::f64::consts::PI,
434        2.0f64 * std::f64::consts::PI
435    );
436}
437
438#[test]
439fn test_two_times_pi_equals_pi_plus_pi_f64_to_f32() {
440    assert_eq!(
441        (std::f64::consts::PI + std::f64::consts::PI) as f32,
442        (2.0f64 * std::f64::consts::PI) as f32
443    );
444}
445
446#[test]
447fn test_two_times_pi_equals_pi_plus_pi_f32() {
448    assert_eq!(
449        std::f32::consts::PI + std::f32::consts::PI,
450        2.0f32 * std::f32::consts::PI
451    );
452}
453
454#[test]
455fn test_rad_to_deg_f64() {
456    assert_eq!(
457        crate::f64::consts::RAD_TO_DEG,
458        180.0f64 / std::f64::consts::PI
459    );
460}
461
462#[test]
463fn test_rad_to_deg_f32() {
464    assert!(crate::f32::approx_equal_f32(
465        crate::f32::consts::RAD_TO_DEG,
466        180.0f32 / std::f32::consts::PI,
467        4
468    ));
469}
470
471#[test]
472fn test_deg_to_rad_f64() {
473    assert_eq!(
474        crate::f64::consts::DEG_TO_RAD,
475        std::f64::consts::PI / 180.0f64
476    );
477}
478
479#[test]
480fn test_deg_to_rad_f32() {
481    assert_eq!(
482        crate::f32::consts::DEG_TO_RAD,
483        std::f32::consts::PI / 180.0f32
484    );
485}
486
487#[test]
488fn test_approx_equal_f64() {
489    assert!(crate::f64::approx_equal_f64(
490        -5.29577951308232f64,
491        -5.29577951308233f64,
492        13
493    ));
494    assert!(!crate::f64::approx_equal_f64(
495        -5.29577951308232f64,
496        -5.29577951308233f64,
497        14
498    ));
499}
500
501#[test]
502#[should_panic]
503fn test_approx_equal_f64_should_error() {
504    let _ = crate::f64::approx_equal_f64(-5.29577951308232f64, -5.29577951308232f64, 20);
505}
506
507#[test]
508fn test_approx_equal_infallible_f64() {
509    assert!(crate::f64::approx_equal_infallible_f64(
510        -5.29577951308232f64,
511        -5.29577951308233f64,
512        13
513    ));
514    assert!(!crate::f64::approx_equal_infallible_f64(
515        -5.29577951308232f64,
516        -5.29577951308233f64,
517        14
518    ));
519    assert!(!crate::f64::approx_equal_infallible_f64(
520        -5.29577951308232f64,
521        -5.29577951308233f64,
522        20
523    ));
524    assert!(crate::f64::approx_equal_infallible_f64(
525        -5.29577951308232f64,
526        -5.29577951308232f64,
527        20
528    ));
529}
530
531#[test]
532fn test_trunc_str() {
533    assert_eq!(crate::str::trunc("0123456789", 0), "");
534    assert_eq!(crate::str::trunc("0123456789", 1), "0");
535    assert_eq!(crate::str::trunc("0123456789", 5), "01234");
536    assert_eq!(crate::str::trunc("0123456789", 10), "0123456789");
537    assert_eq!(crate::str::trunc("0123456789", 11), "0123456789");
538}
539
540#[test]
541#[ignore]
542fn test_() {}