I might be missing something but I think there’s a bug in the Basics module sin and cos functions.

> pi
3.141592653589793 : Float
> sin pi
1.2246467991473532e-16 : Float -- should be zero
> cos pi
-1 : Float
> sin 0
0 : Float
> cos 0
1 : Float
> sin (pi/2)
1 : Float
> cos (pi/2)
6.123233995736766e-17 : Float -- should be 0
> sin (pi*2)
-2.4492935982947064e-16 : Float -- should be 0
> cos (pi*2)
1 : Float

Notice the e-16 at the end, meaning that you’re not getting 1.22, you’re getting 1.22 divided by ten to the sixteenth power. Which is very small, but not zero.

This is how floating point numbers work, for better or worse. I think it has to do with the fact the pi is not exactly π. This is the same answer returned by the JavaScript expression Math.sin(Math.PI).

If you’re working with floating point numbers in elm-test, there are dedicated functions for expecting a value to be within a certain tolerance.

example, using floor will give you -1, not 0! You could use round, but depending on exactly what you’re doing there will almost certainly be a better solution. If you’re testing something, test within a tolerance as @mgold mentions, or if you just want to display the result in ‘nice’ way then try a dedicated number formatting package; myrho/elm-round looks pretty nice.