Copyright 2016-2023 Moddable Tech, Inc.
Revised: February 15, 2024
XS supports one realm by virtual machine. Tests that expect $262.createRealm
to return a new realm fail.
XS does not implement ECMA-402, the Internationalization API Specification, so the intl402
tests are skipped.
No XS hosts are web browsers, so the annexB
tests are skipped. However XS implements Date.prototype.getYear
, Date.prototype.setYear
, Object.prototype.__defineGetter__
, Object.prototype.__defineSetter__
, Object.prototype.__lookupGetter__
, Object.prototype.__lookupSetter__
, Object.prototype.__proto__
, String.prototype.substr
, escape
and unescape
,
On microcontrollers, XS uses a runtime model based on a virtual machine prepared by the XS compiler and linker. The prepared virtual machine contains the ECMAScript built-ins, along with the classes, functions and objects of preloaded modules. The prepared virtual machine is in ROM, its contents is shared by the tiny virtual machines that XS quickly creates in RAM to run apps.
Such a runtime model introduces no conformance issues in itself since XS can alias shared classes, functions and objects if apps modify them. However, in order to save ROM and RAM, other restrictions have been introduced:
- Host functions, i.e. functions implemented in C, are primitive values like booleans, numbers, strings, etc. They are promoted to
Function
objects when necessary.
- Scripts evaluation is optional. So some platforms do not support
eval
, new Function
, etc. But all platforms support JSON.parse
.
- Optionally the XS linker can dead strip ECMAScript built-ins that Moddable apps do not use, and remove
length
and name
properties from functions.
Here the conformance is tested on macOS with a traditional runtime model and without any restrictions. For each case, XS creates a virtual machine, then parses and runs the script. The XS harness, xst
, uses LibYAML to load the frontmatter, which contains, among other information, the harness scripts to parse and run before the case script itself.
To build xst
:
cd $MODDABLE/xs/makefiles/lin
make
cd $MODDABLE/xs/makefiles/mac
make
cd %MODDABLE%\xs\makefiles\win
build
To pass some tests, clone test262 and change the directory to the test
directory inside the test262
directory. Then you can run xst
with files or directories. For instance:
cd ~/test262/test
$MODDABLE/build/bin/mac/release/xst language/block-scope
$MODDABLE/build/bin/mac/release/xst built-ins/TypedArray*
After the 6th edition, TC39 adopted a process based on proposals. Each proposal has a maturity stage. At stage 4, proposals are finished and will be published in the following edition of the specifications.
The official conformance test suite, test262, contains cases for the published specifications, together with cases for proposals at stages 3 and 4, which is great to prepare XS for future editions. The XS harness, xst
uses adhoc comparisons of the frontmatter [features]
to skip cases related to not yet implemented proposals. See the skipped cases at the end of this document.
Currently, on macOS, XS passes 99.41% of the language tests and 82.04% of the built-ins tests.
Mostly because of Temporal
, the number of skipped cases is significant. For implemented features, XS passes 99.92% of the language tests and 99.88% of the built-ins tests.
Details are here under. The numbers of skipped cases are between parentheses. The following section lists the failed tests with some explanations.
42636/42888 (218) language
460/460 arguments-object
43/43 mapped
8/8 unmapped
204/204 asi
287/287 block-scope
30/30 leave
4/4 return-from
30/30 shadowing
223/223 syntax
16/16 for-in
12/12 function-declarations
189/189 redeclaration
6/6 redeclaration-global
81/81 comments
35/35 hashbang
96/96 computed-property-names
6/6 basics
58/58 class
8/8 accessor
22/22 method
28/28 static
24/24 object
12/12 accessor
10/10 method
2/2 property
8/8 to-name-side-effects
34/34 destructuring
34/34 binding
28/28 syntax
62/62 directive-prologue
452/454 eval-code
336/336 direct
116/118 indirect
3/3 export
20252/20415 (138) expressions
95/95 addition
104/104 array
643/643 arrow-function
10/10 arrow
454/454 dstr
5/5 forbidden-ext
2/2 b1
3/3 b2
77/77 syntax
43/43 early-errors
833/839 assignment
6/6 destructuring
640/640 dstr
615/615 assignmenttargettype
108/108 async-arrow-function
5/5 forbidden-ext
2/2 b1
3/3 b2
158/161 async-function
10/10 forbidden-ext
4/4 b1
6/6 b2
1209/1212 async-generator
744/744 dstr
10/10 forbidden-ext
4/4 b1
6/6 b2
42/42 await
59/59 bitwise-and
32/32 bitwise-not
59/59 bitwise-or
59/59 bitwise-xor
170/171 call
8010/8020 (10) class
42/42 accessor-name-inst
42/42 accessor-name-static
191/191 async-gen-method
5/5 forbidden-ext
2/2 b1
3/3 b2
191/191 async-gen-method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
59/59 async-method
5/5 forbidden-ext
2/2 b1
3/3 b2
59/59 async-method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
0/8 (8) decorator
0/8 (8) syntax
0/1 (1) class-valid
0/7 (7) valid
3840/3840 dstr
2839/2841 (2) elements
156/156 async-gen-private-method
156/156 async-gen-private-method-static
24/24 async-private-method
24/24 async-private-method-static
12/12 evaluation-error
20/20 gen-private-method
20/20 gen-private-method-static
40/40 private-accessor-name
10/10 private-methods
498/499 (1) syntax
444/444 early-errors
192/192 delete
56/56 invalid-names
54/55 (1) valid
55/55 gen-method
5/5 forbidden-ext
2/2 b1
3/3 b2
55/55 gen-method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
35/35 method
5/5 forbidden-ext
2/2 b1
3/3 b2
35/35 method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
72/72 subclass-builtins
46/46 coalesce
11/11 comma
786/786 compound-assignment
10/10 concatenation
42/42 conditional
99/99 delete
89/89 division
75/75 does-not-equals
959/1087 (128) dynamic-import
53/53 assignment-expression
208/208 catch
0/22 (22) import-assertions
0/22 (22) import-attributes
116/116 namespace
320/404 (84) syntax
194/194 invalid
126/210 (84) valid
216/216 usage
93/93 equals
88/88 exponentiation
480/484 function
372/372 dstr
8/8 early-errors
5/5 forbidden-ext
2/2 b1
3/3 b2
542/546 generators
372/372 dstr
5/5 forbidden-ext
2/2 b1
3/3 b2
97/97 greater-than
85/85 greater-than-or-equal
16/16 grouping
27/27 import.meta
23/23 syntax
69/69 in
85/85 instanceof
89/89 left-shift
89/89 less-than
93/93 less-than-or-equal
34/34 logical-and
132/132 logical-assignment
38/38 logical-not
34/34 logical-or
79/79 modulus
79/79 multiplication
118/118 new
28/28 new.target
2248/2250 object
1122/1122 dstr
557/557 method-definition
20/20 forbidden-ext
8/8 b1
12/12 b2
76/76 optional-chaining
65/65 postfix-decrement
66/66 postfix-increment
58/58 prefix-decrement
57/57 prefix-increment
42/42 property-accessors
2/2 relational
73/73 right-shift
59/59 strict-does-not-equals
59/59 strict-equals
75/75 subtraction
166/168 super
48/48 tagged-template
114/114 template-literal
11/11 this
32/32 typeof
28/28 unary-minus
34/34 unary-plus
89/89 unsigned-right-shift
18/18 void
123/123 yield
281/281 function-code
85/85 future-reserved-words
74/75 global-code
21/22 identifier-resolution
495/495 identifiers
4/28 (24) import
0/12 (12) import-assertions
0/12 (12) import-attributes
50/50 keywords
82/82 line-terminators
871/871 literals
118/118 bigint
92/92 numeric-separators
8/8 boolean
6/6 null
301/301 numeric
126/126 numeric-separators
310/310 regexp
112/112 named-groups
128/128 string
552/594 (42) module-code
0/13 (13) import-assertions
0/13 (13) import-attributes
36/36 namespace
34/34 internals
245/245 top-level-await
211/211 syntax
22/22 punctuators
53/53 reserved-words
22/22 rest-parameters
2/2 source-text
160/160 statementList
17586/17605 (14) statements
133/133 async-function
5/5 forbidden-ext
2/2 b1
3/3 b2
590/590 async-generator
372/372 dstr
5/5 forbidden-ext
2/2 b1
3/3 b2
40/40 block
8/8 early-errors
40/40 break
8630/8646 (14) class
42/42 accessor-name-inst
42/42 accessor-name-static
4/4 arguments
191/191 async-gen-method
5/5 forbidden-ext
2/2 b1
3/3 b2
191/191 async-gen-method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
59/59 async-method
5/5 forbidden-ext
2/2 b1
3/3 b2
59/59 async-method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
0/12 (12) decorator
0/12 (12) syntax
0/1 (1) class-valid
0/11 (11) valid
130/130 definition
3840/3840 dstr
3046/3048 (2) elements
156/156 async-gen-private-method
156/156 async-gen-private-method-static
24/24 async-private-method
24/24 async-private-method-static
12/12 evaluation-error
20/20 gen-private-method
20/20 gen-private-method-static
40/40 private-accessor-name
10/10 private-methods
498/499 (1) syntax
444/444 early-errors
192/192 delete
56/56 invalid-names
54/55 (1) valid
55/55 gen-method
5/5 forbidden-ext
2/2 b1
3/3 b2
55/55 gen-method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
35/35 method
5/5 forbidden-ext
2/2 b1
3/3 b2
35/35 method-static
5/5 forbidden-ext
2/2 b1
3/3 b2
12/12 name-binding
4/4 strict-mode
214/216 subclass
140/140 builtin-objects
10/10 Array
4/4 ArrayBuffer
4/4 Boolean
4/4 DataView
4/4 Date
6/6 Error
8/8 Function
10/10 GeneratorFunction
4/4 Map
36/36 NativeError
4/4 Number
8/8 Object
4/4 Promise
2/2 Proxy
6/6 RegExp
4/4 Set
6/6 String
4/4 Symbol
4/4 TypedArray
4/4 WeakMap
4/4 WeakSet
72/72 subclass-builtins
16/16 super
26/26 syntax
4/4 early-errors
271/271 const
186/186 dstr
50/50 syntax
48/48 continue
4/4 debugger
70/70 do-while
4/4 empty
6/6 expression
758/758 for
570/570 dstr
2425/2427 for-await-of
196/196 for-in
49/49 dstr
1416/1416 for-of
1095/1095 dstr
783/783 function
372/372 dstr
8/8 early-errors
5/5 forbidden-ext
2/2 b1
3/3 b2
510/510 generators
372/372 dstr
5/5 forbidden-ext
2/2 b1
3/3 b2
125/125 if
37/37 labeled
287/287 let
186/186 dstr
60/60 syntax
31/31 return
216/216 switch
127/127 syntax
127/127 redeclaration
28/28 throw
387/388 try
186/186 dstr
309/309 variable
194/194 dstr
72/72 while
170/170 with
211/211 types
10/10 boolean
6/6 list
8/8 null
39/39 number
36/36 object
49/49 reference
48/48 string
15/15 undefined
134/134 white-space
34077/41392 (7275) built-ins
5763/5869 (94) Array
8/8 Symbol.species
90/90 from
0/94 (94) fromAsync
58/58 isArray
60/60 length
32/32 of
5415/5427 prototype
2/2 Symbol.iterator
8/8 Symbol.unscopables
22/22 at
135/137 concat
76/76 copyWithin
18/18 entries
427/427 every
40/40 fill
472/474 filter
38/38 find
38/38 findIndex
40/40 findLast
40/40 findLastIndex
38/38 flat
45/45 flatMap
370/370 forEach
54/54 includes
393/393 indexOf
40/40 join
18/18 keys
389/389 lastIndexOf
421/423 map
46/46 pop
48/48 push
511/511 reduce
509/511 reduceRight
34/34 reverse
40/40 shift
134/136 slice
428/428 some
99/99 sort
160/162 splice
16/16 toLocaleString
34/34 toReversed
6/6 metadata
38/38 toSorted
6/6 metadata
60/60 toSpliced
6/6 metadata
22/22 toString
42/42 unshift
18/18 values
38/38 with
6/6 metadata
376/376 ArrayBuffer
8/8 Symbol.species
34/34 isView
284/284 prototype
20/20 byteLength
22/22 detached
22/22 maxByteLength
20/20 resizable
40/40 resize
64/64 slice
46/46 transfer
46/46 transferToFixedLength
46/46 ArrayIteratorPrototype
6/6 Symbol.toStringTag
40/40 next
2/2 AsyncArrowFunction
76/76 AsyncFromSyncIteratorPrototype
26/26 next
20/20 return
30/30 throw
36/36 AsyncFunction
46/46 AsyncGeneratorFunction
12/12 prototype
96/96 AsyncGeneratorPrototype
22/22 next
38/38 return
32/32 throw
8/8 AsyncIteratorPrototype
8/8 Symbol.asyncIterator
736/738 (2) Atomics
30/30 add
6/6 bigint
30/30 and
6/6 bigint
32/32 compareExchange
6/6 bigint
32/32 exchange
6/6 bigint
14/14 isLockFree
2/2 bigint
28/28 load
6/6 bigint
94/94 notify
16/16 bigint
30/30 or
6/6 bigint
32/32 store
6/6 bigint
30/30 sub
6/6 bigint
148/150 (2) wait
48/49 (1) bigint
200/200 waitAsync
88/88 bigint
30/30 xor
6/6 bigint
150/150 BigInt
28/28 asIntN
28/28 asUintN
2/2 parseInt
48/48 prototype
2/2 toLocaleString
22/22 toString
16/16 valueOf
101/101 Boolean
51/51 prototype
2/2 constructor
20/20 toString
20/20 valueOf
1010/1010 DataView
888/888 prototype
22/22 buffer
28/28 byteLength
26/26 byteOffset
42/42 getBigInt64
42/42 getBigUint64
42/42 getFloat32
42/42 getFloat64
36/36 getInt16
56/56 getInt32
34/34 getInt8
36/36 getUint16
36/36 getUint32
34/34 getUint8
46/46 setBigInt64
4/4 setBigUint64
46/46 setFloat32
46/46 setFloat64
46/46 setInt16
46/46 setInt32
42/42 setInt8
46/46 setUint16
46/46 setUint32
42/42 setUint8
1540/1540 Date
44/44 UTC
12/12 now
26/26 parse
1304/1304 prototype
36/36 Symbol.toPrimitive
14/14 constructor
26/26 getDate
26/26 getDay
26/26 getFullYear
26/26 getHours
26/26 getMilliseconds
26/26 getMinutes
26/26 getMonth
26/26 getSeconds
26/26 getTime
26/26 getTimezoneOffset
26/26 getUTCDate
26/26 getUTCDay
26/26 getUTCFullYear
26/26 getUTCHours
26/26 getUTCMilliseconds
26/26 getUTCMinutes
26/26 getUTCMonth
26/26 getUTCSeconds
34/34 setDate
46/46 setFullYear
52/52 setHours
34/34 setMilliseconds
42/42 setMinutes
40/40 setMonth
40/40 setSeconds
32/32 setTime
20/20 setUTCDate
18/18 setUTCFullYear
20/20 setUTCHours
20/20 setUTCMilliseconds
20/20 setUTCMinutes
20/20 setUTCMonth
20/20 setUTCSeconds
24/24 toDateString
34/34 toISOString
26/26 toJSON
18/18 toLocaleDateString
18/18 toLocaleString
18/18 toLocaleTimeString
26/26 toString
22/22 toTimeString
28/28 toUTCString
22/22 valueOf
82/82 Error
54/54 prototype
4/4 constructor
2/2 message
2/2 name
28/28 toString
94/110 (16) FinalizationRegistry
62/77 (15) prototype
0/14 (14) cleanupSome
34/34 register
20/21 (1) unregister
887/889 Function
16/16 internals
4/4 Call
12/12 Construct
26/26 length
596/598 prototype
22/22 Symbol.hasInstance
86/86 apply
200/200 bind
90/90 call
2/2 constructor
158/160 toString
46/46 GeneratorFunction
12/12 prototype
120/120 GeneratorPrototype
28/28 next
44/44 return
44/44 throw
10/10 Infinity
10/385 (375) Iterator
0/15 (15) from
10/362 (352) prototype
10/10 Symbol.iterator
0/2 (2) Symbol.toStringTag
0/2 (2) constructor
0/33 (33) drop
0/32 (32) every
0/36 (36) filter
0/31 (31) find
0/43 (43) flatMap
0/26 (26) forEach
0/35 (35) map
0/29 (29) reduce
0/32 (32) some
0/32 (32) take
0/18 (18) toArray
286/288 JSON
144/144 parse
130/132 stringify
338/338 Map
8/8 Symbol.species
26/26 groupBy
244/244 prototype
2/2 Symbol.iterator
22/22 clear
22/22 delete
20/20 entries
36/36 forEach
22/22 get
22/22 has
20/20 keys
28/28 set
22/22 size
20/20 values
22/22 MapIteratorPrototype
20/20 next
622/622 Math
4/4 E
4/4 LN10
4/4 LN2
4/4 LOG10E
4/4 LOG2E
4/4 PI
4/4 SQRT1_2
4/4 SQRT2
16/16 abs
16/16 acos
14/14 acosh
18/18 asin
10/10 asinh
14/14 atan
22/22 atan2
10/10 atanh
10/10 cbrt
22/22 ceil
20/20 clz32
18/18 cos
10/10 cosh
18/18 exp
10/10 expm1
22/22 floor
18/18 fround
24/24 hypot
10/10 imul
18/18 log
10/10 log10
10/10 log1p
10/10 log2
20/20 max
20/20 min
56/56 pow
10/10 random
22/22 round
10/10 sign
16/16 sin
10/10 sinh
18/18 sqrt
18/18 tan
10/10 tanh
24/24 trunc
10/10 NaN
234/234 NativeErrors
50/50 AggregateError
12/12 prototype
30/30 EvalError
10/10 prototype
30/30 RangeError
10/10 prototype
30/30 ReferenceError
10/10 prototype
30/30 SyntaxError
10/10 prototype
30/30 TypeError
10/10 prototype
30/30 URIError
10/10 prototype
670/670 Number
6/6 MAX_VALUE
6/6 MIN_VALUE
8/8 NEGATIVE_INFINITY
8/8 POSITIVE_INFINITY
16/16 isFinite
18/18 isInteger
14/14 isNaN
20/20 isSafeInteger
2/2 parseFloat
2/2 parseInt
330/330 prototype
30/30 toExponential
26/26 toFixed
8/8 toLocaleString
34/34 toPrecision
180/180 toString
22/22 valueOf
6776/6780 (4) Object
74/74 assign
640/640 create
1262/1262 defineProperties
2244/2244 defineProperty
42/42 entries
102/102 freeze
50/50 fromEntries
620/620 getOwnPropertyDescriptor
36/36 getOwnPropertyDescriptors
90/90 getOwnPropertyNames
24/24 getOwnPropertySymbols
78/78 getPrototypeOf
26/26 groupBy
124/124 hasOwn
12/12 internals
12/12 DefineOwnProperty
42/42 is
76/76 isExtensible
118/118 isFrozen
66/66 isSealed
118/118 keys
78/78 preventExtensions
482/486 (4) prototype
22/22 __defineGetter__
22/22 __defineSetter__
32/32 __lookupGetter__
32/32 __lookupSetter__
30/30 __proto__
4/4 constructor
126/126 hasOwnProperty
20/20 isPrototypeOf
32/32 propertyIsEnumerable
22/22 toLocaleString
74/78 (4) toString
40/40 valueOf
186/186 seal
24/24 setPrototypeOf
40/40 values
1232/1232 Promise
10/10 Symbol.species
192/192 all
204/204 allSettled
184/184 any
242/242 prototype
28/28 catch
56/56 finally
146/146 then
184/184 race
30/30 reject
60/60 resolve
12/12 withResolvers
607/607 Proxy
28/28 apply
58/58 construct
48/48 defineProperty
30/30 deleteProperty
2/2 enumerate
38/38 get
42/42 getOwnPropertyDescriptor
38/38 getPrototypeOf
43/43 has
24/24 isExtensible
54/54 ownKeys
23/23 preventExtensions
35/35 revocable
54/54 set
34/34 setPrototypeOf
306/306 Reflect
18/18 apply
20/20 construct
24/24 defineProperty
22/22 deleteProperty
2/2 enumerate
22/22 get
26/26 getOwnPropertyDescriptor
20/20 getPrototypeOf
20/20 has
16/16 isExtensible
26/26 ownKeys
20/20 preventExtensions
36/36 set
28/28 setPrototypeOf
3344/3375 (13) RegExp
48/48 CharacterClassEscapes
8/8 Symbol.species
8/8 dotall
34/34 lookBehind
28/28 match-indices
52/62 (10) named-groups
1176/1176 property-escapes
890/890 generated
56/56 strings
948/968 (2) prototype
106/106 Symbol.match
52/52 Symbol.matchAll
138/138 Symbol.replace
46/46 Symbol.search
88/88 Symbol.split
14/16 dotAll
152/154 (2) exec
32/32 flags
18/20 global
14/16 hasIndices
18/20 ignoreCase
18/20 multiline
22/24 source
14/16 sticky
90/90 test
18/18 toString
14/16 unicode
74/76 unicodeSets
224/224 unicodeSets
224/224 generated
34/34 RegExpStringIteratorPrototype
30/30 next
392/576 (184) Set
8/8 Symbol.species
340/524 (184) prototype
2/2 Symbol.iterator
2/2 Symbol.toStringTag
42/42 add
38/38 clear
4/4 constructor
40/40 delete
0/28 (28) difference
34/34 entries
64/64 forEach
60/60 has
0/28 (28) intersection
0/24 (24) isDisjointFrom
0/23 (23) isSubsetOf
0/24 (24) isSupersetOf
2/2 keys
12/12 size
0/28 (28) symmetricDifference
0/29 (29) union
36/36 values
22/22 SetIteratorPrototype
20/20 next
0/64 (64) ShadowRealm
0/5 (5) WrappedFunction
0/51 (51) prototype
0/37 (37) evaluate
0/12 (12) importValue
202/202 SharedArrayBuffer
156/156 prototype
18/18 byteLength
30/30 grow
18/18 growable
20/20 maxByteLength
64/64 slice
2355/2359 (2) String
30/30 fromCharCode
22/22 fromCodePoint
2060/2064 (2) prototype
12/12 Symbol.iterator
22/22 at
60/60 charAt
50/50 charCodeAt
32/32 codePointAt
44/44 concat
4/4 constructor
54/54 endsWith
54/54 includes
94/94 indexOf
16/16 isWellFormed
48/48 lastIndexOf
24/26 localeCompare
88/90 (2) match
40/40 matchAll
28/28 normalize
26/26 padEnd
26/26 padStart
32/32 repeat
92/92 replace
82/82 replaceAll
74/74 search
72/72 slice
232/232 split
42/42 startsWith
88/88 substring
56/56 toLocaleLowerCase
52/52 toLocaleUpperCase
56/56 toLowerCase
14/14 toString
52/52 toUpperCase
16/16 toWellFormed
258/258 trim
46/46 trimEnd
46/46 trimStart
14/14 valueOf
60/60 raw
14/14 StringIteratorPrototype
10/10 next
176/180 Symbol
4/4 asyncIterator
16/18 for
4/4 hasInstance
4/4 isConcatSpreadable
4/4 iterator
14/16 keyFor
4/4 match
4/4 matchAll
68/68 prototype
18/18 Symbol.toPrimitive
14/14 description
14/14 toString
16/16 valueOf
4/4 replace
4/4 search
8/8 species
4/4 split
4/4 toPrimitive
4/4 toStringTag
4/4 unscopables
0/6520 (6520) Temporal
0/850 (850) Calendar
0/15 (15) from
0/827 (827) prototype
0/66 (66) dateAdd
0/23 (23) dateFromFields
0/54 (54) dateUntil
0/47 (47) day
0/46 (46) dayOfWeek
0/46 (46) dayOfYear
0/46 (46) daysInMonth
0/46 (46) daysInWeek
0/46 (46) daysInYear
0/13 (13) fields
0/3 (3) id
0/43 (43) inLeapYear
0/12 (12) mergeFields
0/48 (48) month
0/48 (48) monthCode
0/21 (21) monthDayFromFields
0/43 (43) monthsInYear
0/7 (7) toJSON
0/6 (6) toString
0/1 (1) toStringTag
0/46 (46) weekOfYear
0/47 (47) year
0/23 (23) yearMonthFromFields
0/44 (44) yearOfWeek
0/605 (605) Duration
0/63 (63) compare
0/24 (24) from
0/494 (494) prototype
0/9 (9) abs
0/86 (86) add
0/3 (3) blank
0/2 (2) days
0/2 (2) hours
0/2 (2) microseconds
0/2 (2) milliseconds
0/2 (2) minutes
0/2 (2) months
0/2 (2) nanoseconds
0/8 (8) negated
0/111 (111) round
0/2 (2) seconds
0/2 (2) sign
0/86 (86) subtract
0/11 (11) toJSON
0/6 (6) toLocaleString
0/40 (40) toString
0/1 (1) toStringTag
0/81 (81) total
0/7 (7) valueOf
0/2 (2) weeks
0/21 (21) with
0/2 (2) years
0/430 (430) Instant
0/25 (25) compare
0/28 (28) from
0/7 (7) fromEpochMicroseconds
0/7 (7) fromEpochMilliseconds
0/7 (7) fromEpochNanoseconds
0/7 (7) fromEpochSeconds
0/341 (341) prototype
0/24 (24) add
0/3 (3) epochMicroseconds
0/3 (3) epochMilliseconds
0/3 (3) epochNanoseconds
0/3 (3) epochSeconds
0/24 (24) equals
0/31 (31) round
0/56 (56) since
0/24 (24) subtract
0/9 (9) toJSON
0/7 (7) toLocaleString
0/54 (54) toString
0/1 (1) toStringTag
0/20 (20) toZonedDateTime
0/14 (14) toZonedDateTimeISO
0/55 (55) until
0/7 (7) valueOf
0/157 (157) Now
0/9 (9) instant
0/19 (19) plainDate
0/12 (12) plainDateISO
0/32 (32) plainDateTime
0/23 (23) plainDateTimeISO
0/14 (14) plainTimeISO
0/6 (6) timeZoneId
0/2 (2) toStringTag
0/23 (23) zonedDateTime
0/15 (15) zonedDateTimeISO
0/732 (732) PlainDate
0/47 (47) compare
0/59 (59) from
0/607 (607) prototype
0/34 (34) add
0/3 (3) calendarId
0/5 (5) day
0/6 (6) dayOfWeek
0/6 (6) dayOfYear
0/6 (6) daysInMonth
0/6 (6) daysInWeek
0/6 (6) daysInYear
0/50 (50) equals
0/6 (6) getCalendar
0/11 (11) getISOFields
0/6 (6) inLeapYear
0/5 (5) month
0/5 (5) monthCode
0/6 (6) monthsInYear
0/91 (91) since
0/34 (34) subtract
0/9 (9) toJSON
0/8 (8) toLocaleString
0/35 (35) toPlainDateTime
0/17 (17) toPlainMonthDay
0/18 (18) toPlainYearMonth
0/21 (21) toString
0/1 (1) toStringTag
0/50 (50) toZonedDateTime
0/90 (90) until
0/7 (7) valueOf
0/6 (6) weekOfYear
0/30 (30) with
0/16 (16) withCalendar
0/5 (5) year
0/6 (6) yearOfWeek
0/898 (898) PlainDateTime
0/45 (45) compare
0/66 (66) from
0/762 (762) prototype
0/35 (35) add
0/3 (3) calendarId
0/5 (5) day
0/6 (6) dayOfWeek
0/6 (6) dayOfYear
0/6 (6) daysInMonth
0/6 (6) daysInWeek
0/6 (6) daysInYear
0/46 (46) equals
0/6 (6) getCalendar
0/11 (11) getISOFields
0/2 (2) hour
0/6 (6) inLeapYear
0/2 (2) microsecond
0/2 (2) millisecond
0/2 (2) minute
0/5 (5) month
0/5 (5) monthCode
0/6 (6) monthsInYear
0/2 (2) nanosecond
0/42 (42) round
0/2 (2) second
0/97 (97) since
0/35 (35) subtract
0/9 (9) toJSON
0/8 (8) toLocaleString
0/7 (7) toPlainDate
0/15 (15) toPlainMonthDay
0/7 (7) toPlainTime
0/15 (15) toPlainYearMonth
0/49 (49) toString
0/1 (1) toStringTag
0/37 (37) toZonedDateTime
0/100 (100) until
0/7 (7) valueOf
0/6 (6) weekOfYear
0/38 (38) with
0/17 (17) withCalendar
0/54 (54) withPlainDate
0/35 (35) withPlainTime
0/5 (5) year
0/6 (6) yearOfWeek
0/239 (239) PlainMonthDay
0/51 (51) from
0/168 (168) prototype
0/3 (3) calendarId
0/6 (6) day
0/39 (39) equals
0/6 (6) getCalendar
0/11 (11) getISOFields
0/1 (1) month
0/6 (6) monthCode
0/9 (9) toJSON
0/7 (7) toLocaleString
0/21 (21) toPlainDate
0/20 (20) toString
0/1 (1) toStringTag
0/7 (7) valueOf
0/29 (29) with
0/582 (582) PlainTime
0/31 (31) compare
0/48 (48) from
0/487 (487) prototype
0/29 (29) add
0/31 (31) equals
0/10 (10) getISOFields
0/2 (2) hour
0/2 (2) microsecond
0/2 (2) millisecond
0/2 (2) minute
0/2 (2) nanosecond
0/39 (39) round
0/2 (2) second
0/73 (73) since
0/29 (29) subtract
0/7 (7) toJSON
0/7 (7) toLocaleString
0/44 (44) toPlainDateTime
0/39 (39) toString
0/1 (1) toStringTag
0/64 (64) toZonedDateTime
0/73 (73) until
0/7 (7) valueOf
0/20 (20) with
0/572 (572) PlainYearMonth
0/41 (41) compare
0/52 (52) from
0/459 (459) prototype
0/46 (46) add
0/3 (3) calendarId
0/6 (6) daysInMonth
0/6 (6) daysInYear
0/42 (42) equals
0/6 (6) getCalendar
0/11 (11) getISOFields
0/6 (6) inLeapYear
0/5 (5) month
0/5 (5) monthCode
0/6 (6) monthsInYear
0/85 (85) since
0/46 (46) subtract
0/8 (8) toJSON
0/7 (7) toLocaleString
0/21 (21) toPlainDate
0/20 (20) toString
0/1 (1) toStringTag
0/84 (84) until
0/7 (7) valueOf
0/31 (31) with
0/5 (5) year
0/287 (287) TimeZone
0/16 (16) from
0/262 (262) prototype
0/14 (14) equals
0/55 (55) getInstantFor
0/21 (21) getNextTransition
0/21 (21) getOffsetNanosecondsFor
0/27 (27) getOffsetStringFor
0/41 (41) getPlainDateTimeFor
0/43 (43) getPossibleInstantsFor
0/21 (21) getPreviousTransition
0/3 (3) id
0/7 (7) toJSON
0/6 (6) toString
0/1 (1) toStringTag
0/1163 (1163) ZonedDateTime
0/52 (52) compare
0/70 (70) from
0/1022 (1022) prototype
0/31 (31) add
0/3 (3) calendarId
0/11 (11) day
0/10 (10) dayOfWeek
0/10 (10) dayOfYear
0/10 (10) daysInMonth
0/10 (10) daysInWeek
0/11 (11) daysInYear
0/3 (3) epochMicroseconds
0/3 (3) epochMilliseconds
0/3 (3) epochNanoseconds
0/3 (3) epochSeconds
0/57 (57) equals
0/6 (6) getCalendar
0/20 (20) getISOFields
0/6 (6) getTimeZone
0/8 (8) hour
0/15 (15) hoursInDay
0/11 (11) inLeapYear
0/9 (9) microsecond
0/9 (9) millisecond
0/8 (8) minute
0/10 (10) month
0/10 (10) monthCode
0/10 (10) monthsInYear
0/8 (8) nanosecond
0/8 (8) offset
0/7 (7) offsetNanoseconds
0/50 (50) round
0/8 (8) second
0/100 (100) since
0/18 (18) startOfDay
0/31 (31) subtract
0/4 (4) timeZoneId
0/6 (6) toInstant
0/19 (19) toJSON
0/10 (10) toLocaleString
0/11 (11) toPlainDate
0/14 (14) toPlainDateTime
0/22 (22) toPlainMonthDay
0/13 (13) toPlainTime
0/22 (22) toPlainYearMonth
0/66 (66) toString
0/1 (1) toStringTag
0/99 (99) until
0/7 (7) valueOf
0/10 (10) weekOfYear
0/51 (51) with
0/15 (15) withCalendar
0/56 (56) withPlainDate
0/42 (42) withPlainTime
0/15 (15) withTimeZone
0/10 (10) year
0/10 (10) yearOfWeek
0/2 (2) toStringTag
28/28 ThrowTypeError
2596/2596 TypedArray
8/8 Symbol.species
28/28 from
14/14 of
2538/2538 prototype
2/2 Symbol.iterator
36/36 Symbol.toStringTag
18/18 BigInt
26/26 at
2/2 BigInt
24/24 buffer
4/4 BigInt
30/30 byteLength
8/8 BigInt
30/30 byteOffset
8/8 BigInt
122/122 copyWithin
48/48 BigInt
32/32 entries
8/8 BigInt
82/82 every
32/32 BigInt
96/96 fill
36/36 BigInt
162/162 filter
72/72 BigInt
66/66 find
24/24 BigInt
66/66 findIndex
24/24 BigInt
66/66 findLast
24/24 BigInt
66/66 findLastIndex
24/24 BigInt
78/78 forEach
30/30 BigInt
76/76 includes
28/28 BigInt
78/78 indexOf
30/30 BigInt
56/56 join
18/18 BigInt
32/32 keys
8/8 BigInt
74/74 lastIndexOf
28/28 BigInt
30/30 length
8/8 BigInt
158/158 map
68/68 BigInt
94/94 reduce
38/38 BigInt
94/94 reduceRight
38/38 BigInt
40/40 reverse
12/12 BigInt
204/204 set
98/98 BigInt
170/170 slice
76/76 BigInt
82/82 some
32/32 BigInt
62/62 sort
20/20 BigInt
124/124 subarray
54/54 BigInt
72/72 toLocaleString
28/28 BigInt
16/16 toReversed
6/6 metadata
20/20 toSorted
6/6 metadata
6/6 toString
2/2 BigInt
32/32 values
8/8 BigInt
28/28 with
2/2 BigInt
6/6 metadata
1406/1406 TypedArrayConstructors
24/24 BigInt64Array
8/8 prototype
24/24 BigUint64Array
8/8 prototype
22/22 Float32Array
8/8 prototype
22/22 Float64Array
8/8 prototype
22/22 Int16Array
8/8 prototype
22/22 Int32Array
8/8 prototype
22/22 Int8Array
8/8 prototype
22/22 Uint16Array
8/8 prototype
22/22 Uint32Array
8/8 prototype
22/22 Uint8Array
8/8 prototype
22/22 Uint8ClampedArray
8/8 prototype
222/222 ctors
106/106 buffer-arg
24/24 length-arg
14/14 no-args
52/52 object-arg
24/24 typedarray-arg
226/226 ctors-bigint
104/104 buffer-arg
24/24 length-arg
14/14 no-args
62/62 object-arg
22/22 typedarray-arg
112/112 from
54/54 BigInt
428/428 internals
108/108 DefineOwnProperty
52/52 BigInt
54/54 Delete
26/26 BigInt
56/56 Get
28/28 BigInt
48/48 GetOwnProperty
24/24 BigInt
62/62 HasProperty
29/29 BigInt
20/20 OwnPropertyKeys
8/8 BigInt
80/80 Set
46/46 BigInt
52/52 of
24/24 BigInt
120/120 prototype
4/4 Symbol.toStringTag
4/4 buffer
4/4 byteLength
4/4 byteOffset
4/4 copyWithin
4/4 entries
4/4 every
4/4 fill
4/4 filter
4/4 find
4/4 findIndex
4/4 forEach
4/4 indexOf
4/4 join
4/4 keys
4/4 lastIndexOf
4/4 length
4/4 map
4/4 reduce
4/4 reduceRight
4/4 reverse
4/4 set
4/4 slice
4/4 some
4/4 sort
4/4 subarray
4/4 toLocaleString
4/4 toString
4/4 values
204/204 WeakMap
156/156 prototype
44/44 delete
26/26 get
40/40 has
40/40 set
58/59 (1) WeakRef
26/27 (1) prototype
18/19 (1) deref
170/170 WeakSet
132/132 prototype
44/44 add
4/4 constructor
40/40 delete
40/40 has
110/110 decodeURI
110/110 decodeURIComponent
62/62 encodeURI
62/62 encodeURIComponent
20/20 eval
56/56 global
34/34 isFinite
34/34 isNaN
118/118 parseFloat
120/120 parseInt
12/12 undefined
Here under are the failed tests. The comments are primarily here for the sake of future versions of XS.
language/eval-code/indirect/realm.js
language/expressions/call/eval-realm-indirect.js (sloppy)
One realm.
language/expressions/assignment/fn-name-lhs-cover.js
Assignments should rename functions only if the left hand side is an identifier. XS also rename functions if the left hand side is a group with only an identifier.
language/expressions/async-function/named-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/async-function/named-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/async-function/named-reassign-fn-name-in-body.js (sloppy)
language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body.js (sloppy)
language/expressions/function/named-no-strict-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/function/named-no-strict-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/function/named-no-strict-reassign-fn-name-in-body.js (sloppy)
language/expressions/function/scope-name-var-open-non-strict.js (sloppy)
language/expressions/generators/named-no-strict-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/generators/named-no-strict-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/generators/named-no-strict-reassign-fn-name-in-body.js (sloppy)
language/expressions/generators/scope-name-var-open-non-strict.js (sloppy)
The name of a function expression always defines a constant variable that reference the current function. In sloppy mode it should define a variable that can be assigned but does not change!
language/expressions/object/literal-property-name-bigint.js
XS does not support bigint as property name.
language/expressions/super/call-proto-not-ctor.js
XS checks if super is a constructor before evaluating arguments.
language/statements/class/subclass/default-constructor-spread-override.js
The default derived constructor should not use %Array.prototype% @@iterator
language/statements/for-await-of/head-lhs-async.js
for (async of x)
is a syntax error but for await (async of x)
should not be!
language/statements/try/tco-catch.js (strict)
XS does not tail call optimize return
inside catch
language/expressions/assignment/target-member-computed-reference-null.js
language/expressions/assignment/target-member-computed-reference-undefined.js
language/global-code/script-decl-lex-var-declared-via-eval-sloppy.js
language/identifier-resolution/assign-to-global-undefined.js
To be investigated.
built-ins/Array/prototype/concat/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/filter/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/map/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/slice/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/splice/create-proto-from-ctor-realm-array.js
built-ins/RegExp/prototype/dotAll/cross-realm.js
built-ins/RegExp/prototype/global/cross-realm.js
built-ins/RegExp/prototype/ignoreCase/cross-realm.js
built-ins/RegExp/prototype/multiline/cross-realm.js
built-ins/RegExp/prototype/source/cross-realm.js
built-ins/RegExp/prototype/sticky/cross-realm.js
built-ins/RegExp/prototype/unicode/cross-realm.js
built-ins/RegExp/prototype/unicodeSets/cross-realm.js
built-ins/Symbol/for/cross-realm.js
built-ins/Symbol/for/cross-realm.js
built-ins/Symbol/keyFor/cross-realm.js
built-ins/Symbol/keyFor/cross-realm.js
One realm.
built-ins/Array/prototype/reduceRight/length-near-integer-limit.js
built-ins/String/prototype/localeCompare/15.5.4.9_CE.js
built-ins/JSON/stringify/replacer-function-object-deleted-property.js
To be investigated.
built-ins/Function/prototype/toString/method-computed-property-name.js
Invalid test.
xst
skips cases with the following features:
- Array.fromAsync
- FinalizationRegistry.prototype.cleanupSome
- ShadowRealm
- Temporal
- arbitrary-module-namespace-names
- decorators
- import-assertions
- import-attributes
- iterator-helpers
- json-modules
- regexp-duplicate-named-groups