elmman/tests/Tests.elm

132 lines
4.6 KiB
Elm

module Tests exposing (..)
import Test exposing (..)
import Expect
import AnimationHelpers
exposing
( calculateAnimation
, movePosition
, distanceFromSpeed
, fmod
, rectToRectCollision
)
trimFloatX : Int -> Float -> Float
trimFloatX precision num =
((num * toFloat (10 ^ precision)) |> round |> toFloat) / toFloat (10 ^ precision)
trimTupleX : Int -> ( Float, Float ) -> ( Float, Float )
trimTupleX precision ( first, second ) =
( trimFloatX precision first, trimFloatX precision second )
trimFloat1 =
trimFloatX 1
trimTuple1 =
trimTupleX 1
all : Test
all =
describe "Elmman Test Suite"
[ describe "Animations frame mapping function"
[ test "Animation frame calculations" <|
\() ->
Expect.equal (calculateAnimation 100 500 ( 0, 200 )) 40
, test "Animation frame calculations 2" <|
\() ->
Expect.equal (calculateAnimation 500 500 ( 0, 200 )) 200
, test "Animation frame calculations 3" <|
\() ->
Expect.equal (calculateAnimation 501 500 ( 0, 200 )) 0
, test "Animation frame calculations with increased range" <|
\() ->
Expect.equal (calculateAnimation 500 500 ( 100, 300 )) 300
, test "Animation frame calculations with increased range 2" <|
\() ->
Expect.equal (calculateAnimation 100 500 ( 100, 300 )) 140
, test "Animation frame calculations with negative range" <|
\() ->
Expect.equal (calculateAnimation 100 500 ( -100, 100 )) -60
]
, describe "Position movement function"
[ test "Move 45 degrees 10 units" <|
\() ->
Expect.equal
(trimTuple1 (movePosition ( 0, 0 ) 45 10))
( 7.1, 7.1 )
, test "Move 45 degrees 200 units from 10,10" <|
\() ->
Expect.equal
(trimTuple1 (movePosition ( 10, 10 ) 45 200))
( 151.4, 151.4 )
, test "Move 158 degrees 200 units" <|
\() ->
Expect.equal
(trimTuple1 (movePosition ( 0, 0 ) 158 200))
( -185.4, 74.9 )
, test "Move 360 degrees 200 units" <|
\() ->
Expect.equal
(trimTuple1 (movePosition ( 0, 0 ) 360 200))
( 200, 0 )
, test "Move 312 degrees 150 units" <|
\() ->
Expect.equal
(trimTuple1 (movePosition ( 0, 0 ) 312 150))
( 100.4, -111.5 )
]
, describe "convert speed/time to distance function"
[ test "speed 200u/s for 4ms" <|
\() ->
Expect.equal
(trimFloat1 (distanceFromSpeed 200 4))
0.8
, test "speed 2000u/s for 1ms" <|
\() ->
Expect.equal
(distanceFromSpeed 2000 1)
2
, test "speed 1 u/s for 1ms" <|
\() ->
Expect.equal
(distanceFromSpeed 1 1)
0.001
, test "speed 1 u/s for 1000ms" <|
\() ->
Expect.equal
(distanceFromSpeed 1 1000)
1
]
, describe "modulus for float"
[ test "10.15 % 9" <|
\() ->
Expect.equal
(trimFloatX 2 (fmod 10.15 9))
1.15
, test "51934 % 123" <|
\() ->
Expect.equal
(fmod 51934 123)
28
]
, describe "Rectangle collision testing"
[ test "No collision" <|
\() ->
Expect.false "Expect rectangles not to collide" <|
rectToRectCollision
( ( 10, 10 ), ( 20, 30 ) )
( ( 30, 50 ), ( 40, 60 ) )
, test "Collide left" <|
\() ->
Expect.true "Expect rectangles to collide" <|
rectToRectCollision
( ( 30, 10 ), ( 50, 30 ) )
( ( 10, 10 ), ( 40, 30 ) )
]
]