ParseInt1.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. //Parse Int Test cases
  6. var id=0;
  7. function verify(get_actual,get_expected,id,testdesc)
  8. {
  9. if(isNaN(get_actual) && isNaN(get_expected))
  10. {
  11. return;
  12. }
  13. if(get_actual !==get_expected)
  14. WScript.Echo(id+":"+testdesc+"\t"+"failed Actual:" + get_actual + " Excpected:" + get_expected);
  15. }
  16. //White space at the begining
  17. verify(parseInt(" 123",10),123,id++,"\"Testing WhiteSpace at the begining of the string\"")
  18. //Escape characters at the begining
  19. verify(parseInt("\t\n\f\r123",10),123,id++,"\"Testing WhiteSpace with escape at the begining of the string\"")
  20. // only white spaces
  21. verify(parseInt("\t\n\f\r",10), NaN,id++,"\"Only whitespaces\"")
  22. // embedded null
  23. verify(parseInt("32\032",10), 32,id++,"\"Embedded null\"")
  24. //White Spaces in the End
  25. verify(parseInt("123 ",10),123,id++,"\"Testing WhiteSpace at the End of the string\"")
  26. //Escape characters at the end
  27. verify(parseInt("123\t\n\f\r",10),123,id++,"\"Testing WhiteSpace with escape at the end of the string\"")
  28. //Space in between Strings
  29. verify(parseInt("12 3",10),12,id++,"\"Testing WhiteSpace in between strings\"")
  30. //Escape Characters in between Strings
  31. verify(parseInt("12\n\t\r\f3",10),12,id++,"\"Testing Escape Characters in between of the strings\"")
  32. //Default Radix Testing: Null
  33. verify(parseInt("123",null),123,id++,"\"Default Radix Null\"")
  34. //Default Radix Testing: NaN
  35. verify(parseInt("123",NaN),123,id++,"\"Default Radix NaN\"")
  36. //Default Radix Testing: Undefined
  37. verify(parseInt("123",undefined),123,id++,"\"Default Radix Undefined\"")
  38. //Default Radix Testing: 0
  39. verify(parseInt("123",0),123,id++,"\"Default Radix 0\"")
  40. //Default Radix Testing with 0X String :Basic
  41. verify(parseInt("0x19",16),25,id++,"\"Default Radix With 0x String: Basic\"")
  42. //Default Radix Testing With 0x String: Null
  43. verify(parseInt("0xFF",null),255,id++,"\"Default Radix With 0x String: Null\"")
  44. //Default Radix Testing With 0x: NaN
  45. verify(parseInt("0xFF",NaN),255,id++,"\"Default Radix With 0x String:NaN\"")
  46. //Default Radix Testing With 0x: Undefined
  47. verify(parseInt("0xFF",undefined),255,id++,"\"Default Radix With 0x String: undefined\"")
  48. //Default Radix Testing With 0x: 0
  49. verify(parseInt("0xFF",0),255,id++,"\"Default Radix With 0x String: 0\"")
  50. //Default Radix Testing With 0X String: Null
  51. verify(parseInt("0XFF",null),255,id++,"\"Default Radix With 0X String: Null\"")
  52. //Default Radix Testing With 0X: NaN
  53. verify(parseInt("0XFF",NaN),255,id++,"\"Default Radix With 0X String:NaN\"")
  54. //Default Radix Testing With 0X: Undefined
  55. verify(parseInt("0XFF",undefined),255,id++,"\"Default Radix With 0X String: undefined\"")
  56. //Default Radix Testing With 0X: 0
  57. verify(parseInt("0XFF",0),255,id++,"\"Default Radix With 0X String: 0\"")
  58. //Default Radix Negative Testing: Out of bound Strings: Null
  59. var x=parseInt("A123",null)
  60. verify(isNaN(x),true,id++,"\"Default Radix:null Negative Testing Null\"")
  61. //Default Radix Negative Testing : Out of bound Strings: NaN
  62. var x=parseInt("A123",NaN)
  63. verify(isNaN(x),true,id++,"\"Default Radix Negative Testing NaN\"")
  64. //Default Radix Negative Testing : Out of bound Strings: undefined
  65. var x=parseInt("A123",undefined)
  66. verify(isNaN(x),true,id++,"\"Default Radix Negative Testing undefined\"")
  67. //Default Radix Negative Testing : Out of bound Strings: 0
  68. var x=parseInt("A123",0)
  69. verify(isNaN(x),true,id++,"\"Default Radix Negative Testing 0\"")
  70. //Default Radix Negative Testing: Out of bound Strings with 0x: Null
  71. var x=parseInt("0xG123",null)
  72. verify(isNaN(x),true,id++,"\"Default Radix with 0x String Negative Testing Null\"")
  73. //Default Radix Negative Testing: Out of bound Strings with 0x: NaN
  74. var x=parseInt("0xG123",NaN)
  75. verify(isNaN(x),true,id++,"\"Default Radix with 0x String Negative Testing NaN\"")
  76. //Default Radix Negative Testing: Out of bound Strings with 0x: undefined
  77. var x=parseInt("0xG123",undefined)
  78. verify(isNaN(x),true,id++,"\"Default Radix with 0x String Negative Testing undefined\"")
  79. //Default Radix Negative Testing: Out of bound Strings with 0x: 0
  80. var x=parseInt("0xG123",0)
  81. verify(isNaN(x),true,id++,"\"Default Radix with 0x String Negative Testing 0\"")
  82. //Default Radix Negative Testing: Out of bound Strings with 0X: Null
  83. var x=parseInt("0XG123",null)
  84. verify(isNaN(x),true,id++,"\"Default Radix with 0X String Negative Testing Null\"")
  85. //Default Radix Negative Testing: Out of bound Strings with 0X: NaN
  86. var x=parseInt("0XG123",NaN)
  87. verify(isNaN(x),true,id++,"\"Default Radix with 0X String Negative Testing NaN\"")
  88. //Default Radix Negative Testing: Out of bound Strings with 0X: undefined
  89. var x=parseInt("0XG123",undefined)
  90. verify(isNaN(x),true,id++,"\"Default Radix with 0X String Negative Testing undefined\"")
  91. //Default Radix Negative Testing: Out of bound Strings with 0X: 0
  92. var x=parseInt("0XG123",0)
  93. verify(isNaN(x),true,id++,"\"Default Radix with 0X String Negative Testing 0\"")
  94. //Radix Testing Limits: Lower Limit 2
  95. verify(parseInt("101",2),5,id++,"\"Radix Testing Limits: Lower Limit 2\"");
  96. //Radix Testing Limits: upper limit 36
  97. verify(parseInt("aAzZ",36),480815,id++,"\"Radix Testing Limits: Upper Limit 36\"");
  98. //Radix Testing Limits: +0
  99. verify(parseInt("11",+0),11,id++,"\"Radix Testing Limits: +0\"");
  100. //Radix Testing Limits: -0
  101. verify(parseInt("11",-0),11,id++,"\"Radix Testing Limits: -0\"");
  102. //Radix Testing Limits: -0.0
  103. verify(parseInt("11",-0.0),11,id++,"\"Radix Testing Limits: -0.0\"");
  104. //Radix Testing Limits: Infinity
  105. verify(parseInt("11",Infinity),11,id++,"\"Radix Testing Limits: Infinity\"");
  106. //Radix Testing Limits: check for 1
  107. var x=parseInt("10",1)
  108. verify(isNaN(x),true,id++,"\"Radix Testing Limits check for 1\"")
  109. //Radix Testing Limits: check for -1
  110. var x=parseInt("10",-1)
  111. verify(isNaN(x),true,id++,"\"Radix Testing Limits check for -1\"")
  112. //Radix Testing Limits: check for 37
  113. var x=parseInt("10",37)
  114. verify(isNaN(x),true,id++,"\"Radix Testing Limits check for 37\"")
  115. //Radix Testing : Non Integer: String
  116. verify(parseInt("11","+2"),3,id++,"\"Radix Testing : Non Integer: String \"")
  117. //Radix Testing : Non Integer : Boolean: true is replaced with a 1
  118. var x=parseInt("10",true)
  119. verify(isNaN(x),true,id++,"\"Radix Testing : Non Integer : Boolean:true is replaced with a 1\"")
  120. //Radix Testing : Non Integer : Boolean: false is replaced with a 0
  121. verify(parseInt("11",false),11,id++,"\"Radix Testing : Non Integer : Boolean: false is replaced with a 0 \"")
  122. //Radix Testing : Output from a Constructor: Number
  123. verify(parseInt("A",new Number(16)),10,id++,"\"Radix testing: Constructor-Number \"");
  124. //Radix Testing Output from a constructor : String
  125. verify(parseInt("A",new String("16")),10,id++,"\"Radix testing: Constructor-String \"");
  126. //Radix Testing Output from a variable
  127. var obj=36
  128. verify(parseInt("aAzZ",obj.toString()),480815,id++,"\"Radix testing: Variable \"");
  129. //Radix Testing Function
  130. function fun()
  131. {
  132. return "35"
  133. }
  134. verify(parseInt("bY",fun()),419,id++,"\"Radix testing:Function \"");
  135. //String Testing : Null
  136. verify(isNaN(parseInt("",10)),true,id++,"\"String Testing :null\"");
  137. //String Testing 2^32
  138. verify(parseInt("4294967296",10),4294967296,id++,"\"String Testing :2^32 \"");
  139. //String Testing -2^32
  140. verify(parseInt("-4294967296",10),-4294967296,id++,"\"String Testing :2^32 \"");
  141. verify(parseInt("999999999",10),999999999,id++,"\"Large int :999999999 \"");
  142. verify(parseInt("-FFFFFFFF",16),-0xFFFFFFFF,id++,"\"Max Neg int (Base 16) :FFFFFFFF \"");
  143. verify(parseInt("-0xFFFFFFFF",16),-0xFFFFFFFF,id++,"\"Max Neg int (Base 16) :FFFFFFFF \"");
  144. verify(parseInt("-0xABCDEF",16),-0xabcdef,id++,"\"Base 16 number\"");
  145. verify(parseInt("-0xabcdef",16),-0xabcdef,id++,"\"Base 16 number\"");
  146. verify(parseInt("abcdefghijklm",34), 24661871785383067000,id++,"\" Base 34 number \"");
  147. verify(parseInt("lmnXYZ",36), 1307858363,id++,"\"Base 36 number - fast path \"");
  148. verify(parseInt("lmnXYZabc",36), 61019439797496,id++,"\"Base 36 number - slow path \"");
  149. //String Testing : Unmatched numbers for the radix
  150. verify(parseInt("AB",11),10,id++,"\"String Testing: unmatched numbers for radix\"");
  151. //String Testing :Expressions
  152. verify(parseInt("A+5",11),10,id++,"\"String Testing: Expressions\"");
  153. //String Testing : floating point
  154. verify(parseInt("5.67",10),5,id++,"\"String Testing: Floating point numbers\"");
  155. //String Testing : Octal Numbers
  156. verify(parseInt("00789",008),7,id++,"\"String Testing: Octal Numbers\"");
  157. //Substring scenarios
  158. var strings = [
  159. { str: "+0x32", start: 0, length: 1, expected: NaN, expectedBase10: NaN },
  160. { str: "+0x32", start: 0, length: 1, expected: NaN, expectedBase10: NaN },
  161. { str: "+0x32", start: 0, length: 2, expected: 0, expectedBase10:0 },
  162. { str: "+0x32", start: 0, length: 3, expected: NaN, expectedBase10: 0 },
  163. { str: "+0x32", start: 0, length: 4, expected: 3, expectedBase10:0 }
  164. ];
  165. for(var i =0; i < strings.length; i++)
  166. {
  167. var current = strings[i];
  168. var substr = current.str.substring(current.start, current.length);
  169. verify(parseInt(substr), current.expected, id++, "Substring testing base: implicit string:" + substr);
  170. verify(parseInt(substr, 10), current.expectedBase10, id++, "Substring testing base: 10 string:" + substr);
  171. verify(parseInt(substr, 16), current.expected, id++, "Substring testing base: 16 string:" + substr);
  172. }
  173. WScript.Echo("Done")