strnum.test.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. const toNumber = require("./strnum.js");
  2. describe("Should convert all the valid numeric strings to number", () => {
  3. it("should return undefined, null, empty string, or non-numeric as it is", () => {
  4. expect(toNumber(undefined)).not.toBeDefined();
  5. expect(toNumber(null)).toEqual(null);
  6. expect(toNumber("")).toEqual("");
  7. expect(toNumber("string")).toEqual("string");
  8. expect(toNumber("e89794659669cb7bb967db73a7ea6889c3891727")).toEqual("e89794659669cb7bb967db73a7ea6889c3891727");
  9. });
  10. it("should not parse number with spaces or comma", () => {
  11. expect(toNumber("12,12")).toEqual("12,12");
  12. expect(toNumber("12 12")).toEqual("12 12");
  13. expect(toNumber("12-12")).toEqual("12-12");
  14. expect(toNumber("12.12.12")).toEqual("12.12.12");
  15. })
  16. it("should consider + sign", () => {
  17. expect(toNumber("+12")).toEqual(12);
  18. expect(toNumber("+ 12")).toEqual("+ 12");
  19. expect(toNumber("12+12")).toEqual("12+12");
  20. expect(toNumber("1212+")).toEqual("1212+");
  21. })
  22. it("should parse hexadecimal values", () => {
  23. expect(toNumber("0x2f")).toEqual(47);
  24. expect(toNumber("-0x2f")).toEqual(-47);
  25. expect(toNumber("0x2f", { hex : true})).toEqual(47);
  26. expect(toNumber("-0x2f", { hex : true})).toEqual(-47);
  27. expect(toNumber("0x2f", { hex : false})).toEqual("0x2f");
  28. expect(toNumber("-0x2f", { hex : false})).toEqual("-0x2f");
  29. })
  30. it("should not parse strings with 0x embedded", () => {
  31. expect(toNumber("0xzz")).toEqual("0xzz");
  32. expect(toNumber("iweraf0x123qwerqwer")).toEqual("iweraf0x123qwerqwer");
  33. expect(toNumber("1230x55")).toEqual("1230x55");
  34. expect(toNumber("JVBERi0xLjMNCiXi48")).toEqual("JVBERi0xLjMNCiXi48");
  35. })
  36. it("leading zeros", () => {
  37. expect(toNumber("0")).toEqual(0);
  38. expect(toNumber("00")).toEqual(0);
  39. expect(toNumber("00.0")).toEqual(0);
  40. expect(toNumber("0",{ leadingZeros : false})).toEqual(0);
  41. expect(toNumber("00",{ leadingZeros : false})).toEqual("00");
  42. expect(toNumber("00.0",{ leadingZeros : false})).toEqual("00.0");
  43. expect(toNumber("06")).toEqual(6);
  44. expect(toNumber("06", { leadingZeros : true})).toEqual(6);
  45. expect(toNumber("06", { leadingZeros : false})).toEqual("06");
  46. expect(toNumber("006")).toEqual(6);
  47. expect(toNumber("006", { leadingZeros : true})).toEqual(6);
  48. expect(toNumber("006", { leadingZeros : false})).toEqual("006");
  49. expect(toNumber("000000000000000000000000017717" , { leadingZeros : false})).toEqual("000000000000000000000000017717");
  50. expect(toNumber("000000000000000000000000017717" , { leadingZeros : true})).toEqual(17717);
  51. expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
  52. expect(toNumber("0420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
  53. })
  54. it("invalid floating number", () => {
  55. expect(toNumber("20.21.030") ).toEqual("20.21.030");
  56. expect(toNumber("0.21.030") ).toEqual("0.21.030");
  57. expect(toNumber("0.21.") ).toEqual("0.21.");
  58. });
  59. it("floating point and leading zeros", () => {
  60. expect(toNumber("0.")).toEqual(0);
  61. expect(toNumber("+0.")).toEqual(0);
  62. expect(toNumber("-0.")).toEqual(-0);
  63. expect(toNumber("1.") ).toEqual(1);
  64. expect(toNumber("00.00")).toEqual(0);
  65. expect(toNumber("0.06")).toEqual(0.06);
  66. expect(toNumber("00.6")).toEqual(0.6);
  67. expect(toNumber(".006")).toEqual(0.006);
  68. expect(toNumber("6.0")).toEqual(6);
  69. expect(toNumber("06.0")).toEqual(6);
  70. expect(toNumber("0.0", { leadingZeros : false})).toEqual(0);
  71. expect(toNumber("00.00", { leadingZeros : false})).toEqual("00.00");
  72. expect(toNumber("0.06", { leadingZeros : false})).toEqual(0.06);
  73. expect(toNumber("00.6", { leadingZeros : false})).toEqual("00.6");
  74. expect(toNumber(".006", { leadingZeros : false})).toEqual(0.006);
  75. expect(toNumber("6.0" , { leadingZeros : false})).toEqual(6);
  76. expect(toNumber("06.0" , { leadingZeros : false})).toEqual("06.0");
  77. })
  78. it("negative number leading zeros", () => {
  79. expect(toNumber("+06")).toEqual(6);
  80. expect(toNumber("-06")).toEqual(-6);
  81. expect(toNumber("-06", { leadingZeros : true})).toEqual(-6);
  82. expect(toNumber("-06", { leadingZeros : false})).toEqual("-06");
  83. expect(toNumber("-0.0")).toEqual(-0);
  84. expect(toNumber("-00.00")).toEqual(-0);
  85. expect(toNumber("-0.06")).toEqual(-0.06);
  86. expect(toNumber("-00.6")).toEqual(-0.6);
  87. expect(toNumber("-.006")).toEqual(-0.006);
  88. expect(toNumber("-6.0")).toEqual(-6);
  89. expect(toNumber("-06.0")).toEqual(-6);
  90. expect(toNumber("-0.0" , { leadingZeros : false})).toEqual(-0);
  91. expect(toNumber("-00.00", { leadingZeros : false})).toEqual("-00.00");
  92. expect(toNumber("-0.06", { leadingZeros : false})).toEqual(-0.06);
  93. expect(toNumber("-00.6", { leadingZeros : false})).toEqual("-00.6");
  94. expect(toNumber("-.006", {leadingZeros : false})).toEqual(-0.006);
  95. expect(toNumber("-6.0" , { leadingZeros : false})).toEqual(-6);
  96. expect(toNumber("-06.0" , { leadingZeros : false})).toEqual("-06.0");
  97. })
  98. it("long number", () => {
  99. expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
  100. expect(toNumber("20211201030005811824") ).toEqual("20211201030005811824");
  101. expect(toNumber("20.211201030005811824") ).toEqual("20.211201030005811824");
  102. expect(toNumber("0.211201030005811824") ).toEqual("0.211201030005811824");
  103. });
  104. it("scientific notation", () => {
  105. expect(toNumber("01.0e2" , { leadingZeros : false})).toEqual("01.0e2");
  106. expect(toNumber("-01.0e2" , { leadingZeros : false})).toEqual("-01.0e2");
  107. expect(toNumber("01.0e2") ).toEqual(100);
  108. expect(toNumber("-01.0e2") ).toEqual(-100);
  109. expect(toNumber("1.0e2") ).toEqual(100);
  110. expect(toNumber("-1.0e2") ).toEqual(-100);
  111. expect(toNumber("1.0e-2")).toEqual(0.01);
  112. expect(toNumber("420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
  113. expect(toNumber("420926189200190257681175017717" , { eNotation: false} )).toEqual("420926189200190257681175017717");
  114. expect(toNumber("1e-2")).toEqual(0.01);
  115. expect(toNumber("1e+2")).toEqual(100);
  116. expect(toNumber("1.e+2")).toEqual(100);
  117. });
  118. it("scientific notation with upper E", () => {
  119. expect(toNumber("01.0E2" , { leadingZeros : false})).toEqual("01.0E2");
  120. expect(toNumber("-01.0E2" , { leadingZeros : false})).toEqual("-01.0E2");
  121. expect(toNumber("01.0E2") ).toEqual(100);
  122. expect(toNumber("-01.0E2") ).toEqual(-100);
  123. expect(toNumber("1.0E2") ).toEqual(100);
  124. expect(toNumber("-1.0E2") ).toEqual(-100);
  125. expect(toNumber("1.0E-2")).toEqual(0.01);
  126. });
  127. it("should skip matching pattern", () => {
  128. expect(toNumber("0", { skipLike: /.*/ })).toEqual("0");
  129. expect(toNumber("+12", { skipLike: /\+[0-9]{10}/} )).toEqual(12);
  130. expect(toNumber("12+12", { skipLike: /\+[0-9]{10}/} )).toEqual("12+12");
  131. expect(toNumber("12+1212121212", { skipLike: /\+[0-9]{10}/} )).toEqual("12+1212121212");
  132. expect(toNumber("+1212121212") ).toEqual(1212121212);
  133. expect(toNumber("+1212121212", { skipLike: /\+[0-9]{10}/} )).toEqual("+1212121212");
  134. })
  135. it("should not change string if not number", () => {
  136. expect(toNumber("+12 12")).toEqual("+12 12");
  137. expect(toNumber(" +12 12 ")).toEqual(" +12 12 ");
  138. })
  139. it("should ignore sorrounded spaces ", () => {
  140. expect(toNumber(" +1212 ")).toEqual(1212);
  141. })
  142. it("negative numbers", () => {
  143. expect(toNumber("+1212")).toEqual(1212);
  144. expect(toNumber("+12.12")).toEqual(12.12);
  145. expect(toNumber("-12.12")).toEqual(-12.12);
  146. expect(toNumber("-012.12")).toEqual(-12.12);
  147. expect(toNumber("-012.12")).toEqual(-12.12);
  148. })
  149. });