% This file is part of Jiffy released under the MIT license. % See the LICENSE file for more information. -module(jiffy_03_number_tests). -include_lib("eunit/include/eunit.hrl"). -include("jiffy_util.hrl"). number_success_test_() -> [gen(ok, Case) || Case <- cases(ok)]. number_failure_test_() -> [gen(error, Case) || Case <- cases(error)]. number_double_test_() -> [gen(floats, Case) || Case <- cases(floats)]. gen(ok, {J, E}) -> gen(ok, {J, E, J}); gen(ok, {J1, E, J2}) -> {msg("~s", [J1]), [ {"Decode", ?_assertEqual(E, dec(J1))}, {"Encode", ?_assertEqual(J2, enc(E))} ]}; gen(error, J) -> {msg("Error: ~s", [J]), [ ?_assertThrow({error, _}, dec(J)) ]}; gen(floats, F) -> NegF = -1.0 * F, {msg("float round trip - ~p", [F]), [ {"Pos", ?_assertEqual(F, dec(enc(F)))}, {"Neg", ?_assertEqual(NegF, dec(enc(NegF)))} ]}. cases(ok) -> [ {<<"0">>, 0}, {<<"-0">>, 0, <<"0">>}, {<<"1">>, 1}, {<<"12">>, 12}, {<<"-3">>, -3}, {<<"1234567890123456789012345">>, 1234567890123456789012345}, {<<"1310050760199">>, 1310050760199}, { <<"1234567890123456789012345.0">>, 1.23456789012345678e24, <<"1.2345678901234568e+24">> }, { <<"1234567890123456789012345.0E3">>, 1.2345678901234569e27, <<"1.2345678901234569e+27">> }, { <<"1234567890123456789012345012">>, 1234567890123456789012345012, <<"1234567890123456789012345012">> }, {<<"1.0">>, 1.0}, { <<"0.000000000000000000000000000000000001">>, 1.0E-36, <<"1e-36">> }, {<<"0.75">>, 0.75}, {<<"2.0123456789">>, 2.0123456789, <<"2.0123456789">>}, {<<"2.4234324E24">>, 2.4234324E24, <<"2.4234324e+24">>}, {<<"-3.1416">>, -3.1416, <<"-3.1416">>}, {<<"1E4">>, 10000.0, <<"10000.0">>}, {<<"1.0E+01">>, 10.0, <<"10.0">>}, {<<"1e1">>, 10.0, <<"10.0">>}, {<<"3.0E2">>, 300.0, <<"300.0">>}, {<<"0E3">>, 0.0, <<"0.0">>}, {<<"1.5E3">>, 1500.0, <<"1500.0">>}, {<<"2.5E-1">>, 0.25, <<"0.25">>}, {<<"-0.325E+2">>, -32.5, <<"-32.5">>} ]; cases(error) -> [ <<"02">>, <<"-01">>, <<"+12">>, <<"-">>, <<"1.">>, <<".1">>, <<"1.-1">>, <<"1E">>, <<"1-E2">>, <<"2E +3">>, <<"1EA">> ]; cases(floats) -> [ 0.0, 0.00000001, 0.000000012, 0.0000000123, 0.0000001, 0.00000012, 0.000000123, 0.000001, 0.00001, 0.01, 0.0123, 0.1, 0.3, 1.0, 1.0e20, 1.0e21, 9.0, 10.0, 90.0, 90.12, 10000.0, 12345.0, 12345.0e23, 100000.0, 100000000000000000000.0, 111111111111111111111.0, 1111111111111111111111.0, 11111111111111111111111.0 ].