| % 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]), [ |
| ?_assertError(_, 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}, |
| {<<"{\"key\":9223372036854775808}">>,{[{<<"key">>,1 bsl 63}]}}, |
| {<<"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">>, |
| <<"1E3000">>, |
| <<"0.1E30000">>, |
| <<"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 |
| ]. |