@@ -7,7 +7,7 @@ WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
7
7
8
8
var tests = [
9
9
{
10
- name : "Basic decimal support" ,
10
+ name : "Basic 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" ) ;
@@ -18,7 +18,7 @@ var tests = [
18
18
}
19
19
} ,
20
20
{
21
- name : "Decimal with exponent" ,
21
+ name : "Decimal literal with exponent" ,
22
22
body : function ( ) {
23
23
assert . areEqual ( 1e100 , 1e1_00 , "1e100 === 1e1_00" ) ;
24
24
assert . areEqual ( Infinity , 1e1_0_0_0 , "Infinity === 1e1_0_0_0" ) ;
@@ -28,11 +28,11 @@ var tests = [
28
28
}
29
29
} ,
30
30
{
31
- name : "Decimal bad syntax" ,
31
+ name : "Decimal literal bad syntax" ,
32
32
body : function ( ) {
33
33
// Decimal left-part only with numeric separators
34
- assert . throws ( ( ) => eval ( '1__2' ) , SyntaxError , "Multiple numeric separators in a row are now allowed" ) ;
35
- assert . throws ( ( ) => eval ( '1_2____3' ) , SyntaxError , "Multiple numeric separators in a row are now allowed" ) ;
34
+ assert . throws ( ( ) => eval ( '1__2' ) , SyntaxError , "Multiple numeric separators in a row are not allowed" ) ;
35
+ assert . throws ( ( ) => eval ( '1_2____3' ) , SyntaxError , "Multiple numeric separators in a row are not allowed" ) ;
36
36
assert . throws ( ( ) => eval ( '1_' ) , SyntaxError , "Decimal may not end in a numeric separator" ) ;
37
37
assert . throws ( ( ) => eval ( '1__' ) , SyntaxError , "Decimal may not end in a numeric separator" ) ;
38
38
assert . throws ( ( ) => eval ( '__1' ) , ReferenceError , "Decimal may not begin with a numeric separator" ) ;
@@ -65,6 +65,69 @@ var tests = [
65
65
assert . throws ( ( ) => eval ( '1_n' ) , SyntaxError ) ;
66
66
}
67
67
} ,
68
+ {
69
+ name : "Strings parsed as number do not support numeric separators for decimal literals" ,
70
+ body : function ( ) {
71
+ assert . areEqual ( NaN , Number ( '12_34' ) , "NaN === Number('12_34')" ) ;
72
+ assert . areEqual ( NaN , Number ( '12e3_4' ) , "NaN === Number('12e3_4')" ) ;
73
+ assert . areEqual ( NaN , Number ( '1234.45_67' ) , "NaN === Number('1234.45_67')" ) ;
74
+ assert . areEqual ( NaN , Number ( '1234.45e6_7' ) , "NaN === Number('1234.45e6_7')" ) ;
75
+
76
+ assert . areEqual ( 1 , parseInt ( '1_2' ) , "1 === parseInt('1_2')" ) ;
77
+ assert . areEqual ( 1 , parseInt ( '1e2_3' ) , "1 === parseInt('1e2_3')" ) ;
78
+ assert . areEqual ( 12 , parseInt ( '12.3_4' ) , "1 === parseInt('12.3_4')" ) ;
79
+ assert . areEqual ( 12 , parseInt ( '12.34e5_6' ) , "1 === parseInt('12.34e5_6')" ) ;
80
+
81
+ assert . areEqual ( 1 , parseFloat ( '1_2' ) , "1 === parseFloat('1_2')" ) ;
82
+ assert . areEqual ( 1e2 , parseFloat ( '1e2_3' ) , "1 === parseFloat('1e2_3')" ) ;
83
+ assert . areEqual ( 12.3 , parseFloat ( '12.3_4' ) , "1 === parseFloat('12.3_4')" ) ;
84
+ assert . areEqual ( 12.34e5 , parseFloat ( '12.34e5_6' ) , "1 === parseFloat('12.34e5_6')" ) ;
85
+ }
86
+ } ,
87
+ {
88
+ name : "Basic binary literal support" ,
89
+ body : function ( ) {
90
+ assert . areEqual ( 0b00 , 0b0_0 , "0b00 === 0b0_0" ) ;
91
+ assert . areEqual ( 0b11 , 0b1_1 , "0b11 === 0b1_1" ) ;
92
+ assert . areEqual ( 0b10 , 0b1_0 , "0b10 === 0b1_0" ) ;
93
+ assert . areEqual ( 0b01 , 0b0_1 , "0b01 === 0b0_1" ) ;
94
+ assert . areEqual ( 0b0001 , 0b000_1 , "0b0001 === 0b000_1" ) ;
95
+ assert . areEqual ( 0b0000 , 0b000_0 , "0b0000 === 0b000_0" ) ;
96
+ assert . areEqual ( 0b000011110000 , 0b0000_1111_0000 , "0b000011110000 === 0b0000_1111_0000" ) ;
97
+ }
98
+ } ,
99
+ {
100
+ name : "Binary literal bad syntax" ,
101
+ body : function ( ) {
102
+ assert . throws ( ( ) => eval ( '0b_' ) , SyntaxError , "'_' cannot immediately follow 0b" ) ;
103
+ assert . throws ( ( ) => eval ( '0b__' ) , SyntaxError , "'_' cannot immediately follow 0b" ) ;
104
+ assert . throws ( ( ) => eval ( '0b_1' ) , SyntaxError , "Binary literal may not begin with numeric separator" ) ;
105
+ assert . throws ( ( ) => eval ( '0b_0' ) , SyntaxError , "Binary literal may not begin with numeric separator" ) ;
106
+ assert . throws ( ( ) => eval ( '0b__1' ) , SyntaxError , "Binary literal may not begin with numeric separator" ) ;
107
+ assert . throws ( ( ) => eval ( '0b__0' ) , SyntaxError , "Binary literal may not begin with numeric separator" ) ;
108
+ assert . throws ( ( ) => eval ( '0b1_' ) , SyntaxError , "Binary literal may not end with numeric separator" ) ;
109
+ assert . throws ( ( ) => eval ( '0b0_' ) , SyntaxError , "Binary literal may not end with numeric separator" ) ;
110
+ assert . throws ( ( ) => eval ( '0b1__' ) , SyntaxError , "Binary literal may not end with numeric separator" ) ;
111
+ assert . throws ( ( ) => eval ( '0b0__' ) , SyntaxError , "Binary literal may not end with numeric separator" ) ;
112
+ assert . throws ( ( ) => eval ( '0b1__1' ) , SyntaxError , "Multiple numeric separator characters may not follow each other" ) ;
113
+ assert . throws ( ( ) => eval ( '0b0__0' ) , SyntaxError , "Multiple numeric separator characters may not follow each other" ) ;
114
+ assert . throws ( ( ) => eval ( '0b000__1' ) , SyntaxError , "Multiple numeric separator characters may not follow each other" ) ;
115
+ assert . throws ( ( ) => eval ( '0b000_a' ) , SyntaxError , "After initial zeroes, a numeric separator followed by an invalid character" ) ;
116
+ }
117
+ } ,
118
+ {
119
+ name : "Strings parsed as number do not support numeric separators for binary literals" ,
120
+ body : function ( ) {
121
+ assert . areEqual ( NaN , Number ( '0b0_1' ) , "NaN === Number('0b0_1')" ) ;
122
+ assert . areEqual ( NaN , Number ( '0b1_0' ) , "NaN === Number('0b1_0')" ) ;
123
+ assert . areEqual ( NaN , Number ( '0b0_0' ) , "NaN === Number('0b0_0')" ) ;
124
+ assert . areEqual ( NaN , Number ( '0b1_1' ) , "NaN === Number('0b1_1')" ) ;
125
+
126
+ assert . areEqual ( 0 , parseInt ( '0b1_0' ) , "0 === parseInt('0b1_0')" ) ;
127
+
128
+ assert . areEqual ( 0 , parseFloat ( '0b1_0' ) , "0 === parseFloat('0b1_0')" ) ;
129
+ }
130
+ } ,
68
131
] ;
69
132
70
133
testRunner . runTests ( tests , { verbose : WScript . Arguments [ 0 ] != "summary" } ) ;
0 commit comments