12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- discard """
- output: '''
- Nim: nan
- Nim: nan (float)
- Nim: nan (double)
- '''
- """
- let f = NaN
- echo "Nim: ", f
- let f32: float32 = NaN
- echo "Nim: ", f32, " (float)"
- let f64: float64 = NaN
- echo "Nim: ", f64, " (double)"
- block: # bug #10305
- # with `-O3 -ffast-math`, generated C/C++ code is not nan compliant
- # user can pass `--passC:-ffast-math` if he doesn't care.
- proc fun() =
- # this was previously failing at compile time with a nim compiler
- # that was compiled with `nim cpp -d:release`
- let a1 = 0.0
- let a = 0.0/a1
- let b1 = a == 0.0
- let b2 = a == a
- doAssert not b1
- doAssert not b2
- proc fun2(i: int) =
- # this was previously failing simply with `nim cpp -d:release`; the
- # difference with above example is that optimization (const folding) can't
- # take place in this example to hide the non-compliant nan bug.
- let a = 0.0/(i.float)
- let b1 = a == 0.0
- let b2 = a == a
- doAssert not b1
- doAssert not b2
- static: fun()
- fun()
- fun2(0)
- template main() =
- # xxx move all tests under here
- block: # bug #16469
- let a1 = 0.0
- let a2 = -0.0
- let a3 = 1.0 / a1
- let a4 = 1.0 / a2
- doAssert a3 == Inf
- doAssert a4 == -Inf
- doAssert $(a1, a2, a3, a4) == "(0.0, -0.0, inf, -inf)"
- static: main()
- main()
|