@@ -7,7 +7,7 @@ WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
7
7
8
8
var tests = [
9
9
{
10
- name : "Basic decimal literal support" ,
10
+ name : "Decimal literal support" ,
11
11
body : function ( ) {
12
12
assert . areEqual ( 1234 , 1_234 , "1234 === 1_234" ) ;
13
13
assert . areEqual ( 1234 , 1_2_3_4 , "1234 === 1_2_3_4" ) ;
@@ -85,7 +85,7 @@ var tests = [
85
85
}
86
86
} ,
87
87
{
88
- name : "Basic binary literal support" ,
88
+ name : "Binary literal support" ,
89
89
body : function ( ) {
90
90
assert . areEqual ( 0b00 , 0b0_0 , "0b00 === 0b0_0" ) ;
91
91
assert . areEqual ( 0b11 , 0b1_1 , "0b11 === 0b1_1" ) ;
@@ -94,6 +94,7 @@ var tests = [
94
94
assert . areEqual ( 0b0001 , 0b000_1 , "0b0001 === 0b000_1" ) ;
95
95
assert . areEqual ( 0b0000 , 0b000_0 , "0b0000 === 0b000_0" ) ;
96
96
assert . areEqual ( 0b000011110000 , 0b0000_1111_0000 , "0b000011110000 === 0b0000_1111_0000" ) ;
97
+ assert . areEqual ( 0b000011110000 , 0b0_0_0_0_1_111_00_00 , "0b000011110000 === 0b0_0_0_0_1_111_00_00" ) ;
97
98
}
98
99
} ,
99
100
{
@@ -128,6 +129,47 @@ var tests = [
128
129
assert . areEqual ( 0 , parseFloat ( '0b1_0' ) , "0 === parseFloat('0b1_0')" ) ;
129
130
}
130
131
} ,
132
+ {
133
+ name : "Hex numeric literal support" ,
134
+ body : function ( ) {
135
+ assert . areEqual ( 0x00 , 0x0_0 , "0x00 === 0x0_0" ) ;
136
+ assert . areEqual ( 0x1f , 0x1_f , "0x1f === 0x1_f" ) ;
137
+ assert . areEqual ( 0x000000Ae1 , 0x00_0_000_A_e1 , "0x000000Ae1 === 0x00_0_000_A_e1" ) ;
138
+ assert . areEqual ( 0xaabbccdd , 0xaa_bb_cc_dd , "0xaabbccdd === 0xaa_bb_cc_dd" ) ;
139
+ }
140
+ } ,
141
+ {
142
+ name : "Hex numeric literal bad syntax" ,
143
+ body : function ( ) {
144
+ assert . throws ( ( ) => eval ( '0x_' ) , SyntaxError , "'_' cannot immediately follow 0x" ) ;
145
+ assert . throws ( ( ) => eval ( '0x__' ) , SyntaxError , "'_' cannot immediately follow 0x" ) ;
146
+ assert . throws ( ( ) => eval ( '0x_1' ) , SyntaxError , "Hex literal may not begin with numeric separator" ) ;
147
+ assert . throws ( ( ) => eval ( '0x_0' ) , SyntaxError , "Hex literal may not begin with numeric separator" ) ;
148
+ assert . throws ( ( ) => eval ( '0x__1' ) , SyntaxError , "Hex literal may not begin with numeric separator" ) ;
149
+ assert . throws ( ( ) => eval ( '0x__0' ) , SyntaxError , "Hex literal may not begin with numeric separator" ) ;
150
+ assert . throws ( ( ) => eval ( '0x1_' ) , SyntaxError , "Hex literal may not end with numeric separator" ) ;
151
+ assert . throws ( ( ) => eval ( '0x0_' ) , SyntaxError , "Hex literal may not end with numeric separator" ) ;
152
+ assert . throws ( ( ) => eval ( '0x1__' ) , SyntaxError , "Hex literal may not end with numeric separator" ) ;
153
+ assert . throws ( ( ) => eval ( '0x0__' ) , SyntaxError , "Hex literal may not end with numeric separator" ) ;
154
+ assert . throws ( ( ) => eval ( '0x1__1' ) , SyntaxError , "Multiple numeric separator characters may not follow each other" ) ;
155
+ assert . throws ( ( ) => eval ( '0x0__0' ) , SyntaxError , "Multiple numeric separator characters may not follow each other" ) ;
156
+ assert . throws ( ( ) => eval ( '0x000__1' ) , SyntaxError , "Multiple numeric separator characters may not follow each other" ) ;
157
+ assert . throws ( ( ) => eval ( '0x000_q' ) , SyntaxError , "After initial zeroes, a numeric separator followed by an invalid character" ) ;
158
+ }
159
+ } ,
160
+ {
161
+ name : "Strings parsed as number do not support numeric separators for hex literals" ,
162
+ body : function ( ) {
163
+ assert . areEqual ( NaN , Number ( '0x0_ff' ) , "NaN === Number('0x0_ff')" ) ;
164
+ assert . areEqual ( NaN , Number ( '0xF_F' ) , "NaN === Number('0xF_F')" ) ;
165
+
166
+ assert . areEqual ( 0 , parseInt ( '0x0_ff' ) , "0 === parseInt('0x0_ff')" ) ;
167
+ assert . areEqual ( 15 , parseInt ( '0xf_00f' ) , "15 === parseInt('0xf_00f')" ) ;
168
+
169
+ assert . areEqual ( 0 , parseFloat ( '0x0_ff' ) , "0 === parseFloat('0x0_ff')" ) ;
170
+ assert . areEqual ( 0 , parseFloat ( '0x1_fe' ) , "0 === parseFloat('0x1_fe')" ) ;
171
+ }
172
+ } ,
131
173
] ;
132
174
133
175
testRunner . runTests ( tests , { verbose : WScript . Arguments [ 0 ] != "summary" } ) ;
0 commit comments