strnum.test.js 7.4 KB

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