Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

136 строки
3.2 KiB

13 лет назад
13 лет назад
  1. % This file is part of Jiffy released under the MIT license.
  2. % See the LICENSE file for more information.
  3. -module(jiffy_03_number_tests).
  4. -include_lib("eunit/include/eunit.hrl").
  5. -include("jiffy_util.hrl").
  6. number_success_test_() ->
  7. [gen(ok, Case) || Case <- cases(ok)].
  8. number_failure_test_() ->
  9. [gen(error, Case) || Case <- cases(error)].
  10. number_double_test_() ->
  11. [gen(floats, Case) || Case <- cases(floats)].
  12. gen(ok, {J, E}) ->
  13. gen(ok, {J, E, J});
  14. gen(ok, {J1, E, J2}) ->
  15. {msg("~s", [J1]), [
  16. {"Decode", ?_assertEqual(E, dec(J1))},
  17. {"Encode", ?_assertEqual(J2, enc(E))}
  18. ]};
  19. gen(error, J) ->
  20. {msg("Error: ~s", [J]), [
  21. ?_assertError(_, dec(J))
  22. ]};
  23. gen(floats, F) ->
  24. NegF = -1.0 * F,
  25. {msg("float round trip - ~p", [F]), [
  26. {"Pos", ?_assertEqual(F, dec(enc(F)))},
  27. {"Neg", ?_assertEqual(NegF, dec(enc(NegF)))}
  28. ]}.
  29. cases(ok) ->
  30. [
  31. {<<"0">>, 0},
  32. {<<"-0">>, 0, <<"0">>},
  33. {<<"1">>, 1},
  34. {<<"12">>, 12},
  35. {<<"-3">>, -3},
  36. {<<"{\"key\":9223372036854775808}">>,{[{<<"key">>,1 bsl 63}]}},
  37. {<<"1234567890123456789012345">>, 1234567890123456789012345},
  38. {<<"1310050760199">>, 1310050760199},
  39. {
  40. <<"1234567890123456789012345.0">>,
  41. 1.23456789012345678e24,
  42. <<"1.2345678901234568e+24">>
  43. },
  44. {
  45. <<"1234567890123456789012345.0E3">>,
  46. 1.2345678901234569e27,
  47. <<"1.2345678901234569e+27">>
  48. },
  49. {
  50. <<"1234567890123456789012345012">>,
  51. 1234567890123456789012345012,
  52. <<"1234567890123456789012345012">>
  53. },
  54. {<<"1.0">>, 1.0},
  55. {
  56. <<"0.000000000000000000000000000000000001">>,
  57. 1.0E-36,
  58. <<"1e-36">>
  59. },
  60. {<<"0.75">>, 0.75},
  61. {<<"2.0123456789">>, 2.0123456789, <<"2.0123456789">>},
  62. {<<"2.4234324E24">>, 2.4234324E24, <<"2.4234324e+24">>},
  63. {<<"-3.1416">>, -3.1416, <<"-3.1416">>},
  64. {<<"1E4">>, 10000.0, <<"10000.0">>},
  65. {<<"1.0E+01">>, 10.0, <<"10.0">>},
  66. {<<"1e1">>, 10.0, <<"10.0">>},
  67. {<<"3.0E2">>, 300.0, <<"300.0">>},
  68. {<<"0E3">>, 0.0, <<"0.0">>},
  69. {<<"1.5E3">>, 1500.0, <<"1500.0">>},
  70. {<<"2.5E-1">>, 0.25, <<"0.25">>},
  71. {<<"-0.325E+2">>, -32.5, <<"-32.5">>}
  72. ];
  73. cases(error) ->
  74. [
  75. <<"02">>,
  76. <<"-01">>,
  77. <<"+12">>,
  78. <<"-">>,
  79. <<"1.">>,
  80. <<".1">>,
  81. <<"1.-1">>,
  82. <<"1E">>,
  83. <<"1-E2">>,
  84. <<"2E +3">>,
  85. <<"1E3000">>,
  86. <<"0.1E30000">>,
  87. <<"1EA">>
  88. ];
  89. cases(floats) ->
  90. [
  91. 0.0,
  92. 0.00000001,
  93. 0.000000012,
  94. 0.0000000123,
  95. 0.0000001,
  96. 0.00000012,
  97. 0.000000123,
  98. 0.000001,
  99. 0.00001,
  100. 0.01,
  101. 0.0123,
  102. 0.1,
  103. 0.3,
  104. 1.0,
  105. 1.0e20,
  106. 1.0e21,
  107. 9.0,
  108. 10.0,
  109. 90.0,
  110. 90.12,
  111. 10000.0,
  112. 12345.0,
  113. 12345.0e23,
  114. 100000.0,
  115. 100000000000000000000.0,
  116. 111111111111111111111.0,
  117. 1111111111111111111111.0,
  118. 11111111111111111111111.0
  119. ].