| 1 | module main |
| 2 | |
| 3 | fn test_issue_16448() { |
| 4 | float_prec := 1.9999999999999999 + 0.0000000000000000005 |
| 5 | assert float_prec > 1.99 |
| 6 | assert float_prec < 2.01 |
| 7 | } |
| 8 | |
| 9 | fn test_atof_converter() { |
| 10 | mut float_prec := 1.9999999999999999 + 0.0000000000000000005 |
| 11 | assert float_prec == 2.0 |
| 12 | float_prec = 3.9999999999999999 + 0.0000000000000000005 |
| 13 | assert float_prec == 4.0 |
| 14 | float_prec = -3.9999999999999999 - 0.0000000000000000005 |
| 15 | assert float_prec == -4.0 |
| 16 | float_prec = -1.9999999999999999 - 0.0000000000000000005 |
| 17 | assert float_prec == -2.0 |
| 18 | float_prec = 0.025 + 0.0000000000000000005 |
| 19 | assert float_prec == 0.025 |
| 20 | float_prec = 0.0625 + 0.0000000000000000005 |
| 21 | assert float_prec == 0.0625 |
| 22 | float_prec = 0.0009765625 + 0.0000000000000000005 |
| 23 | assert float_prec > 0.00097656250 && float_prec < 0.00097656251 |
| 24 | float_prec = -0.025 - 0.0000000000000000005 |
| 25 | assert float_prec == -0.025 |
| 26 | float_prec = -0.0625 - 0.0000000000000000005 |
| 27 | assert float_prec == -0.0625 |
| 28 | float_prec = -0.0009765625 - 0.0000000000000000005 |
| 29 | assert float_prec < -0.00097656250 && float_prec > -0.00097656251 |
| 30 | } |
| 31 | |
| 32 | // Testing all the numbers between -100E6..100E6 takes over a minute with clang on i3 |
| 33 | // while for just -1E5..1E5, it takes less than a second. |
| 34 | // const r = i64(100_000_001) |
| 35 | // const r = i64(17_000_001) |
| 36 | const r = i64(100_001) |
| 37 | |
| 38 | fn test_renormalisation_inside_converter() { |
| 39 | for i in -r .. r { |
| 40 | s := '${i}.9999999999999999999' |
| 41 | fs := s.f64() |
| 42 | ifs := i64(fs) |
| 43 | if i % 10000 == 0 { |
| 44 | eprintln('>>> s: ${s:30s} | fs: ${fs:20.6f} | ifs: ${ifs:20}') |
| 45 | } |
| 46 | if i < 0 && ifs != i - 1 { |
| 47 | panic('invalid negative f64 value, i: ${i} | s: ${s} | fs: ${fs} | ifs: ${ifs}') |
| 48 | } |
| 49 | if i > 0 && ifs != i + 1 { |
| 50 | panic('invalid positive f64 value, i: ${i} | s: ${s} | fs: ${fs} | ifs: ${ifs}') |
| 51 | } |
| 52 | } |
| 53 | } |
| 54 | |