let { run, Test, assert_eq, test, group, ? } = import! std.test
let { (<|) } = import! std.function
let prelude = import! std.prelude
let { Applicative, (*>), ? } = import! std.applicative
let int = import! std.int
let float = import! std.float
let byte @ { ? } = import! std.byte
let { empty } = import! std.monoid
let { ? } = import! std.effect
let byte_tests =
group "byte" [
test "arithmetic" <| \_ ->
assert_eq 2b 2b
*> assert_eq 12b (10b + 2b)
*> assert_eq 123b (50b * 2b + 9b * 3b - 4b),
test "from_int" <| \_ -> assert_eq (byte.from_int 2) 2b,
test "from_int_truncate" <| \_ -> assert_eq (byte.from_int 2000) 208b,
]
let int_tests =
group "int" [
test "arithmetic" <| \_ ->
assert_eq 2 2
*> assert_eq 12 (10 + 2)
*> assert_eq 123 (50 * 2 + 9 * 3 - 4),
test "from_float" <| \_ -> assert_eq (int.from_float 2.0) 2,
test "from_float_truncate" <| \_ -> assert_eq (int.from_float 2.7) 2,
test "from_byte" <| \_ -> assert_eq (int.from_byte 2b) 2,
group "monoid" [
test "additive" <| \_ ->
let { ? } = int.additive
assert_eq 0 empty,
test "multiplicative" <| \_ ->
let { ? } = int.multiplicative
assert_eq 1 empty,
]
]
let float_tests =
group "float" [
test "float" <| \_ -> assert_eq 91.0 (50.0 * 2.0 - 3.0 * 3.0),
test "from_int" <| \_ -> assert_eq (float.from_int 2) 2.0,
]
group "arithmetic" [byte_tests, int_tests, float_tests]