Skip to content

Commit f916c11

Browse files
committed
tests: bigint.erl: test limits around +-(2^256 - 1)
Test for overflows and for not-yet-overflowed values, when converting from float to big int. Also test comparison between floats and big ints. Signed-off-by: Davide Bettio <davide@uninstall.it>
1 parent 4e5755d commit f916c11

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

tests/erlang_tests/bigint.erl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,28 @@ conv_to_from_float() ->
555555
true = (Int64Min =< ?MODULE:id(trunc(?MODULE:id(-9223372036854776832.0)))),
556556
true = (Int64Min > ?MODULE:id(trunc(?MODULE:id(-9223372036854776833.0)))),
557557

558+
% test limits and comparisons
559+
MaxInt = erlang:binary_to_integer(
560+
?MODULE:id(<<"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF">>), 16
561+
),
562+
MaxIntAsFloat = erlang:float(?MODULE:id(MaxInt)),
563+
true = (?MODULE:id(1.111111111111111e77) < MaxIntAsFloat),
564+
true = (MaxIntAsFloat < ?MODULE:id(1.888888888888888e77)),
565+
566+
MinInt = erlang:binary_to_integer(
567+
?MODULE:id(<<"-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF">>), 16
568+
),
569+
MinIntAsFloat = erlang:float(?MODULE:id(MinInt)),
570+
true = (?MODULE:id(-1.111111111111111e77) > MinIntAsFloat),
571+
true = (MinIntAsFloat > ?MODULE:id(-1.888888888888888e77)),
572+
573+
% test overflows
574+
expect_overflow(fun() -> trunc(?MODULE:id(1.157920892373163e77)) end),
575+
expect_overflow(fun() -> trunc(?MODULE:id(-1.157920892373163e77)) end),
576+
577+
true = (trunc(?MODULE:id(1.157920892373160e77)) > ?MODULE:pow(2, 255)),
578+
true = (trunc(?MODULE:id(-1.157920892373160e77)) < ?MODULE:pow(-2, 255)),
579+
558580
0.
559581

560582
divtrunc(X, Y) ->

0 commit comments

Comments
 (0)