ES6 Compatibility (585/597)

OPTIMISATION
proper tail calls (tail call optimisation) 2/2
direct recursion
pass
mutual recursion
pass

SYNTAX
default function parameters 7/7
basic functionality
pass
explicit undefined defers to the default
pass
defaults can refer to previous params
pass
arguments object interaction
pass
temporal dead zone
pass
separate scope
pass
new Function() support
pass

rest parameters 5/5
basic functionality
pass
function 'length' property
pass
arguments object interaction
pass
can't be used in setters
pass
new Function() support
pass

spread (...) operator 15/15
with arrays, in function calls
pass
with arrays, in array literals
pass
with sparse arrays, in function calls
pass
with sparse arrays, in array literals
pass
with strings, in function calls
pass
with strings, in array literals
pass
with astral plane strings, in function calls
pass
with astral plane strings, in array literals
pass
with generator instances, in calls
pass
with generator instances, in arrays
pass
with generic iterables, in calls
pass
with generic iterables, in arrays
pass
with instances of iterables, in calls
pass
with instances of iterables, in arrays
pass
spreading non-iterables is a runtime error
pass

object literal extensions 6/6
computed properties
pass
shorthand properties
pass
shorthand methods
pass
string-keyed shorthand methods
pass
computed shorthand methods
pass
computed accessors
pass

for..of loops 9/9
with arrays
pass
with sparse arrays
pass
with strings
pass
with astral plane strings
pass
with generator instances
pass
with generic iterables
pass
with instances of generic iterables
pass
iterator closing, break
pass
iterator closing, throw
pass

octal and binary literals 4/4
octal literals
pass
binary literals
pass
octal supported by Number()
pass
binary supported by Number()
pass

template strings 5/5
basic functionality
pass
toString conversion
pass
tagged template strings
pass
passed array is frozen
pass
line break normalisation
pass

RegExp "y" and "u" flags 2/4
"y" flag
pass
"y" flag, lastIndex
pass
"u" flag
fail
"u" flag, Unicode code point escapes
fail

destructuring 36/36
with arrays
pass
with sparse arrays
pass
with strings
pass
with astral plane strings
pass
with generator instances
pass
with generic iterables
pass
with instances of generic iterables
pass
iterator closing
pass
iterable destructuring expression
pass
chained iterable destructuring
pass
trailing commas in iterable patterns
pass
with objects
pass
object destructuring with primitives
pass
trailing commas in object patterns
pass
object destructuring expression
pass
parenthesised left-hand-side is a syntax error
pass
chained object destructuring
pass
throws on null and undefined
pass
computed properties
pass
multiples in a single var statement
pass
nested
pass
in parameters
pass
in parameters, 'arguments' interaction
pass
in parameters, new Function() support
pass
in parameters, function 'length' property
pass
in for-in loop heads
pass
in for-of loop heads
pass
rest
pass
nested rest
pass
empty patterns
pass
empty patterns in parameters
pass
defaults
pass
defaults in parameters
pass
defaults, let temporal dead zone
pass
defaults in parameters, separate scope
pass
defaults in parameters, new Function() support
pass

Unicode code point escapes 2/2
in strings
pass
in identifiers
pass

new.target 2/2
in constructors
pass
can't be assigned to
pass

BINDINGS
const 8/8
basic support
pass
is block-scoped
pass
redefining a const is an error
pass
temporal dead zone
pass
basic support (strict mode)
pass
is block-scoped (strict mode)
pass
redefining a const (strict mode)
pass
temporal dead zone (strict mode)
pass

let 10/10
basic support
pass
is block-scoped
pass
for-loop statement scope
pass
temporal dead zone
pass
for-loop iteration scope
pass
basic support (strict mode)
pass
is block-scoped (strict mode)
pass
for-loop statement scope (strict mode)
pass
temporal dead zone (strict mode)
pass
for-loop iteration scope (strict mode)
pass

block-level function declaration 1/1
pass

FUNCTIONS
arrow functions 12/13
0 parameters
pass
1 parameter, no brackets
pass
multiple parameters
pass
lexical "this" binding
pass
"this" unchanged by call or apply
pass
can't be bound, can be curried
pass
lexical "arguments" binding
pass
no line break between params and <code>=></code>
pass
correct precedence
fail
no "prototype" property
pass
lexical "super" binding in constructors
pass
lexical "super" binding in methods
pass
lexical "new.target" binding
pass

class 23/23
class statement
pass
is block-scoped
pass
class expression
pass
anonymous class
pass
constructor
pass
prototype methods
pass
string-keyed methods
pass
computed prototype methods
pass
static methods
pass
computed static methods
pass
accessor properties
pass
computed accessor properties
pass
static accessor properties
pass
computed static accessor properties
pass
class name is lexically scoped
pass
computed names, temporal dead zone
pass
methods aren't enumerable
pass
implicit strict mode
pass
constructor requires new
pass
extends
pass
extends expressions
pass
extends null
pass
new.target
pass

super 8/8
statement in constructors
pass
expression in constructors
pass
in methods, property access
pass
in methods, method calls
pass
method calls use correct "this" binding
pass
constructor calls use correct "new.target" binding
pass
is statically bound
pass
super() invokes the correct constructor
pass

generators 25/25
basic functionality
pass
generator function expressions
pass
correct "this" binding
pass
can't use "this" with new
pass
sending
pass
%GeneratorPrototype%
pass
%GeneratorPrototype%.constructor
pass
%GeneratorPrototype%.throw
pass
%GeneratorPrototype%.return
pass
yield operator precedence
pass
yield *, arrays
pass
yield *, sparse arrays
pass
yield *, strings
pass
yield *, astral plane strings
pass
yield *, generator instances
pass
yield *, generic iterables
pass
yield *, instances of iterables
pass
yield * on non-iterables is a runtime error
pass
yield *, iterator closing
pass
yield *, iterator closing via throw()
pass
shorthand generator methods
pass
string-keyed shorthand generator methods
pass
computed shorthand generators
pass
shorthand generator methods, classes
pass
computed shorthand generators, classes
pass

BUILT-INS
typed arrays 46/46
Int8Array
pass
Uint8Array
pass
Uint8ClampedArray
pass
Int16Array
pass
Uint16Array
pass
Int32Array
pass
Uint32Array
pass
Float32Array
pass
Float64Array
pass
DataView (Int8)
pass
DataView (Uint8)
pass
DataView (Int16)
pass
DataView (Uint16)
pass
DataView (Int32)
pass
DataView (Uint32)
pass
DataView (Float32)
pass
DataView (Float64)
pass
ArrayBuffer[Symbol.species]
pass
constructors require new
pass
constructors accepts generic iterables
pass
correct prototype chains
pass
%TypedArray%.from
pass
%TypedArray%.of
pass
%TypedArray%.prototype.subarray
pass
%TypedArray%.prototype.join
pass
%TypedArray%.prototype.indexOf
pass
%TypedArray%.prototype.lastIndexOf
pass
%TypedArray%.prototype.slice
pass
%TypedArray%.prototype.every
pass
%TypedArray%.prototype.filter
pass
%TypedArray%.prototype.forEach
pass
%TypedArray%.prototype.map
pass
%TypedArray%.prototype.reduce
pass
%TypedArray%.prototype.reduceRight
pass
%TypedArray%.prototype.reverse
pass
%TypedArray%.prototype.some
pass
%TypedArray%.prototype.sort
pass
%TypedArray%.prototype.copyWithin
pass
%TypedArray%.prototype.find
pass
%TypedArray%.prototype.findIndex
pass
%TypedArray%.prototype.fill
pass
%TypedArray%.prototype.keys
pass
%TypedArray%.prototype.values
pass
%TypedArray%.prototype.entries
pass
%TypedArray%.prototype[Symbol.iterator]
pass
%TypedArray%[Symbol.species]
pass

Map 18/18
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes set
pass
iterator closing
pass
Map.prototype.set returns this
pass
-0 key converts to +0
pass
Map.prototype.size
pass
Map.prototype.delete
pass
Map.prototype.clear
pass
Map.prototype.forEach
pass
Map.prototype.keys
pass
Map.prototype.values
pass
Map.prototype.entries
pass
Map.prototype[Symbol.iterator]
pass
Map iterator prototype chain
pass
Map[Symbol.species]
pass

Set 18/18
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes add
pass
iterator closing
pass
Set.prototype.add returns this
pass
-0 key converts to +0
pass
Set.prototype.size
pass
Set.prototype.delete
pass
Set.prototype.clear
pass
Set.prototype.forEach
pass
Set.prototype.keys
pass
Set.prototype.values
pass
Set.prototype.entries
pass
Set.prototype[Symbol.iterator]
pass
Set iterator prototype chain
pass
Set[Symbol.species]
pass

WeakMap 10/10
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes set
pass
frozen objects as keys
pass
iterator closing
pass
WeakMap.prototype.set returns this
pass
WeakMap.prototype.delete
pass
no WeakMap.prototype.clear method
pass

WeakSet 9/9
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes add
pass
iterator closing
pass
WeakSet.prototype.add returns this
pass
WeakSet.prototype.delete
pass
no WeakSet.prototype.clear method
pass

Proxy 21/21
constructor requires new
pass
"get" handler
pass
"get" handler, instances of proxies
pass
"set" handler
pass
"set" handler, instances of proxies
pass
"has" handler
pass
"has" handler, instances of proxies
pass
"deleteProperty" handler
pass
"getOwnPropertyDescriptor" handler
pass
"defineProperty" handler
pass
"getPrototypeOf" handler
pass
"setPrototypeOf" handler
pass
"isExtensible" handler
pass
"preventExtensions" handler
pass
"enumerate" handler
pass
"ownKeys" handler
pass
"apply" handler
pass
"construct" handler
pass
Proxy.revocable
pass
Array.isArray support
pass
JSON.stringify support
pass

Reflect 17/17
Reflect.get
pass
Reflect.set
pass
Reflect.has
pass
Reflect.deleteProperty
pass
Reflect.getOwnPropertyDescriptor
pass
Reflect.defineProperty
pass
Reflect.getPrototypeOf
pass
Reflect.setPrototypeOf
pass
Reflect.isExtensible
pass
Reflect.preventExtensions
pass
Reflect.enumerate
pass
Reflect.ownKeys
pass
Reflect.ownKeys, symbol order
pass
Reflect.apply
pass
Reflect.construct
pass
Reflect.construct sets new.target meta property
pass
Reflect.construct creates instance from newTarget argument
pass

Promise 7/7
basic functionality
pass
constructor requires new
pass
Promise.all
pass
Promise.all, generic iterables
pass
Promise.race
pass
Promise.race, generic iterables
pass
Promise[Symbol.species]
pass

Symbol 10/10
basic functionality
pass
typeof support
pass
symbol keys are hidden to pre-ES6 code
pass
Object.defineProperty support
pass
cannot coerce to string or number
pass
can convert with String()
pass
new Symbol() throws
pass
Object(symbol)
pass
JSON.stringify ignores symbols
pass
global symbol registry
pass

well-known symbols 23/23
Symbol.hasInstance
pass
Symbol.isConcatSpreadable
pass
Symbol.iterator, existence
pass
Symbol.iterator, arguments object
pass
Symbol.species, existence
pass
Symbol.species, Array.prototype.concat
pass
Symbol.species, Array.prototype.filter
pass
Symbol.species, Array.prototype.map
pass
Symbol.species, Array.prototype.slice
pass
Symbol.species, Array.prototype.splice
pass
Symbol.species, RegExp.prototype[Symbol.split]
pass
Symbol.replace
pass
Symbol.search
pass
Symbol.split
pass
Symbol.match
pass
Symbol.match, RegExp constructor
pass
Symbol.match, String.prototype.startsWith
pass
Symbol.match, String.prototype.endsWith
pass
Symbol.match, String.prototype.includes
pass
Symbol.toPrimitive
pass
Symbol.toStringTag
pass
Symbol.toStringTag, misc. built-ins
pass
Symbol.unscopables
pass

BUILT-IN EXTENSIONS
Object static methods 4/4
Object.assign
pass
Object.is
pass
Object.getOwnPropertySymbols
pass
Object.setPrototypeOf
pass

function "name" property 17/17
function statements
pass
function expressions
pass
new Function
pass
bound functions
pass
variables (function)
pass
object methods (function)
pass
accessor properties
pass
shorthand methods
pass
shorthand methods (no lexical binding)
pass
symbol-keyed methods
pass
class statements
pass
class expressions
pass
variables (class)
pass
object methods (class)
pass
class prototype methods
pass
class static methods
pass
isn't writable, is configurable
pass

String static methods 2/2
String.raw
pass
String.fromCodePoint
pass

String.prototype methods 8/8
String.prototype.codePointAt
pass
String.prototype.normalize
pass
String.prototype.repeat
pass
String.prototype.startsWith
pass
String.prototype.endsWith
pass
String.prototype.includes
pass
String.prototype[Symbol.iterator]
pass
String iterator prototype chain
pass

RegExp.prototype properties 6/6
RegExp.prototype.flags
pass
RegExp.prototype[Symbol.match]
pass
RegExp.prototype[Symbol.replace]
pass
RegExp.prototype[Symbol.split]
pass
RegExp.prototype[Symbol.search]
pass
RegExp[Symbol.species]
pass

Array static methods 11/11
Array.from, array-like objects
pass
Array.from, generator instances
pass
Array.from, generic iterables
pass
Array.from, instances of generic iterables
pass
Array.from map function, array-like objects
pass
Array.from map function, generator instances
pass
Array.from map function, generic iterables
pass
Array.from map function, instances of iterables
pass
Array.from, iterator closing
pass
Array.of
pass
Array[Symbol.species]
pass

Array.prototype methods 10/10
Array.prototype.copyWithin
pass
Array.prototype.find
pass
Array.prototype.findIndex
pass
Array.prototype.fill
pass
Array.prototype.keys
pass
Array.prototype.values
pass
Array.prototype.entries
pass
Array.prototype[Symbol.iterator]
pass
Array iterator prototype chain
pass
Array.prototype[Symbol.unscopables]
pass

Number properties 7/7
Number.isFinite
pass
Number.isInteger
pass
Number.isSafeInteger
pass
Number.isNaN
pass
Number.EPSILON
pass
Number.MIN_SAFE_INTEGER
pass
Number.MAX_SAFE_INTEGER
pass

Math methods 17/17
Math.clz32
pass
Math.imul
pass
Math.sign
pass
Math.log10
pass
Math.log2
pass
Math.log1p
pass
Math.expm1
pass
Math.cosh
pass
Math.sinh
pass
Math.tanh
pass
Math.acosh
pass
Math.asinh
pass
Math.atanh
pass
Math.trunc
pass
Math.fround
pass
Math.cbrt
pass
Math.hypot
pass

SUBCLASSING
Array is subclassable 11/11
length property (accessing)
pass
length property (setting)
pass
correct prototype chain
pass
Array.isArray support
pass
Array.prototype.concat
pass
Array.prototype.filter
pass
Array.prototype.map
pass
Array.prototype.slice
pass
Array.prototype.splice
pass
Array.from
pass
Array.of
pass

RegExp is subclassable 4/4
basic functionality
pass
correct prototype chain
pass
RegExp.prototype.exec
pass
RegExp.prototype.test
pass

Function is subclassable 6/6
can be called
pass
correct prototype chain
pass
can be used with "new"
pass
Function.prototype.call
pass
Function.prototype.apply
pass
Function.prototype.bind
pass

Promise is subclassable 4/4
basic functionality
pass
correct prototype chain
pass
Promise.all
pass
Promise.race
pass

miscellaneous subclassables 5/5
Boolean is subclassable
pass
Number is subclassable
pass
String is subclassable
pass
Map is subclassable
pass
Set is subclassable
pass

MISC
prototype of bound functions 5/5
basic functions
pass
generator functions
pass
arrow functions
pass
classes
pass
subclasses
pass

Proxy, internal 'get' calls 35/35
ToPrimitive
pass
CreateListFromArrayLike
pass
instanceof operator
pass
HasBinding
pass
CreateDynamicFunction
pass
ClassDefinitionEvaluation
pass
IteratorComplete, IteratorValue
pass
ToPropertyDescriptor
pass
Object.assign
pass
Object.defineProperties
pass
Function.prototype.bind
pass
Error.prototype.toString
pass
String.raw
pass
RegExp constructor
pass
RegExp.prototype.flags
pass
RegExp.prototype.test
pass
RegExp.prototype[Symbol.match]
pass
RegExp.prototype[Symbol.replace]
pass
RegExp.prototype[Symbol.search]
pass
RegExp.prototype[Symbol.split]
pass
Array.from
pass
Array.prototype.concat
pass
Array.prototype iteration methods
pass
Array.prototype.pop
pass
Array.prototype.reverse
pass
Array.prototype.shift
pass
Array.prototype.splice
pass
Array.prototype.toString
pass
JSON.stringify
pass
Promise resolve functions
pass
String.prototype.match
pass
String.prototype.replace
pass
String.prototype.search
pass
String.prototype.split
pass
Date.prototype.toJSON
pass

Proxy, internal 'set' calls 11/11
Object.assign
pass
Array.from
pass
Array.of
pass
Array.prototype.copyWithin
pass
Array.prototype.fill
pass
Array.prototype.pop
pass
Array.prototype.push
pass
Array.prototype.reverse
pass
Array.prototype.shift
pass
Array.prototype.splice
pass
Array.prototype.unshift
pass

Proxy, internal 'defineProperty' calls 2/2
[[Set]]
pass
SetIntegrityLevel
pass

Proxy, internal 'deleteProperty' calls 6/6
Array.prototype.copyWithin
pass
Array.prototype.pop
pass
Array.prototype.reverse
pass
Array.prototype.shift
pass
Array.prototype.splice
pass
Array.prototype.unshift
pass

Proxy, internal 'getOwnPropertyDescriptor' calls 4/4
[[Set]]
pass
Object.assign
pass
Object.prototype.hasOwnProperty
pass
Function.prototype.bind
pass

Proxy, internal 'ownKeys' calls 3/3
SetIntegrityLevel
pass
TestIntegrityLevel
pass
SerializeJSONObject
pass

Object static methods accept primitives 10/10
Object.getPrototypeOf
pass
Object.getOwnPropertyDescriptor
pass
Object.getOwnPropertyNames
pass
Object.seal
pass
Object.freeze
pass
Object.preventExtensions
pass
Object.isSealed
pass
Object.isFrozen
pass
Object.isExtensible
pass
Object.keys
pass

own property order 8/8
for..in
pass
Object.keys
pass
Object.getOwnPropertyNames
pass
Object.assign
pass
JSON.stringify
pass
JSON.parse
pass
Reflect.ownKeys, string key order
pass
Reflect.ownKeys, symbol key order
pass

miscellaneous 9/10
no escaped reserved words as identifiers
pass
duplicate property names in strict mode
pass
no semicolon needed after do-while
pass
no assignments allowed in for-in head
pass
accessors aren't constructors
pass
Invalid Date
pass
RegExp constructor can alter flags
pass
built-in prototypes are not instances
fail
function 'length' is configurable
pass
String.prototype case methods, Unicode support
pass

ANNEX B
non-strict function semantics 2/3
hoisted block-level function declaration
fail
labeled function statements
pass
function statements in if-statement clauses
pass

__proto__ in object literals 5/5
basic support
pass
multiple __proto__ is an error
pass
not a computed property
pass
not a shorthand property
pass
not a shorthand method
pass

Object.prototype.__proto__ 6/6
get prototype
pass
set prototype
pass
absent from Object.create(null)
pass
present in hasOwnProperty()
pass
correct property descriptor
pass
present in Object.getOwnPropertyNames()
pass

String.prototype HTML methods 0/3
existence
fail
tags' names are lowercase
fail
quotes in arguments are escaped
fail

RegExp.prototype.compile 1/1
pass

RegExp syntax extensions 5/8
hyphens in character sets
pass
invalid character escapes
fail
invalid control-character escapes
fail
invalid Unicode escapes
pass
invalid hexadecimal escapes
fail
incomplete patterns and quantifiers
pass
octal escape sequences
pass
invalid backreferences become octal escapes
pass

HTML-style comments 0/1
fail

ES6 Compatibility (577/596)

OPTIMISATION
proper tail calls (tail call optimisation) 2/2
direct recursion
pass
mutual recursion
pass

SYNTAX
default function parameters 7/7
basic functionality
pass
explicit undefined defers to the default
pass
defaults can refer to previous params
pass
arguments object interaction
pass
temporal dead zone
pass
separate scope
pass
new Function() support
pass

rest parameters 5/5
basic functionality
pass
function 'length' property
pass
arguments object interaction
pass
can't be used in setters
pass
new Function() support
pass

spread (...) operator 15/15
with arrays, in function calls
pass
with arrays, in array literals
pass
with sparse arrays, in function calls
pass
with sparse arrays, in array literals
pass
with strings, in function calls
pass
with strings, in array literals
pass
with astral plane strings, in function calls
pass
with astral plane strings, in array literals
pass
with generator instances, in calls
pass
with generator instances, in arrays
pass
with generic iterables, in calls
pass
with generic iterables, in arrays
pass
with instances of iterables, in calls
pass
with instances of iterables, in arrays
pass
spreading non-iterables is a runtime error
pass

object literal extensions 6/6
computed properties
pass
shorthand properties
pass
shorthand methods
pass
string-keyed shorthand methods
pass
computed shorthand methods
pass
computed accessors
pass

for..of loops 9/9
with arrays
pass
with sparse arrays
pass
with strings
pass
with astral plane strings
pass
with generator instances
pass
with generic iterables
pass
with instances of generic iterables
pass
iterator closing, break
pass
iterator closing, throw
pass

octal and binary literals 4/4
octal literals
pass
binary literals
pass
octal supported by Number()
pass
binary supported by Number()
pass

template strings 5/5
basic functionality
pass
toString conversion
pass
tagged template strings
pass
passed array is frozen
pass
line break normalisation
pass

RegExp "y" and "u" flags 2/4
"y" flag
pass
"y" flag, lastIndex
pass
"u" flag
fail
"u" flag, Unicode code point escapes
fail

destructuring 36/36
with arrays
pass
with sparse arrays
pass
with strings
pass
with astral plane strings
pass
with generator instances
pass
with generic iterables
pass
with instances of generic iterables
pass
iterator closing
pass
iterable destructuring expression
pass
chained iterable destructuring
pass
trailing commas in iterable patterns
pass
with objects
pass
object destructuring with primitives
pass
trailing commas in object patterns
pass
object destructuring expression
pass
parenthesised left-hand-side is a syntax error
pass
chained object destructuring
pass
throws on null and undefined
pass
computed properties
pass
multiples in a single var statement
pass
nested
pass
in parameters
pass
in parameters, 'arguments' interaction
pass
in parameters, new Function() support
pass
in parameters, function 'length' property
pass
in for-in loop heads
pass
in for-of loop heads
pass
rest
pass
nested rest
fail
empty patterns
pass
empty patterns in parameters
pass
defaults
pass
defaults in parameters
pass
defaults, let temporal dead zone
pass
defaults in parameters, separate scope
pass
defaults in parameters, new Function() support
pass

Unicode code point escapes 0/2
in strings
fail
in identifiers
fail

new.target 2/2
in constructors
pass
can't be assigned to
pass

BINDINGS
const 8/8
basic support
pass
is block-scoped
pass
redefining a const is an error
pass
temporal dead zone
pass
basic support (strict mode)
pass
is block-scoped (strict mode)
pass
redefining a const (strict mode)
pass
temporal dead zone (strict mode)
pass

let 10/10
basic support
pass
is block-scoped
pass
for-loop statement scope
pass
temporal dead zone
pass
for-loop iteration scope
pass
basic support (strict mode)
pass
is block-scoped (strict mode)
pass
for-loop statement scope (strict mode)
pass
temporal dead zone (strict mode)
pass
for-loop iteration scope (strict mode)
pass

block-level function declaration 1/1
pass

FUNCTIONS
arrow functions 11/12
0 parameters
pass
1 parameter, no brackets
pass
multiple parameters
pass
lexical "this" binding
pass
"this" unchanged by call or apply
pass
can't be bound, can be curried
pass
lexical "arguments" binding
pass
no line break between params and <code>=></code>
pass
correct precedence
fail
no "prototype" property
pass
lexical "super" binding
pass
lexical "new.target" binding
pass

class 23/23
class statement
pass
is block-scoped
pass
class expression
pass
anonymous class
pass
constructor
pass
prototype methods
pass
string-keyed methods
pass
computed prototype methods
pass
static methods
pass
computed static methods
pass
accessor properties
pass
computed accessor properties
pass
static accessor properties
pass
computed static accessor properties
pass
class name is lexically scoped
pass
computed names, temporal dead zone
pass
methods aren't enumerable
pass
implicit strict mode
pass
constructor requires new
pass
extends
pass
extends expressions
pass
extends null
pass
new.target
pass

super 8/8
statement in constructors
pass
expression in constructors
pass
in methods, property access
pass
in methods, method calls
pass
method calls use correct "this" binding
pass
constructor calls use correct "new.target" binding
pass
is statically bound
pass
super() invokes the correct constructor
pass

generators 25/25
basic functionality
pass
generator function expressions
pass
correct "this" binding
pass
can't use "this" with new
pass
sending
pass
%GeneratorPrototype%
pass
%GeneratorPrototype%.constructor
pass
%GeneratorPrototype%.throw
pass
%GeneratorPrototype%.return
pass
yield operator precedence
pass
yield *, arrays
pass
yield *, sparse arrays
pass
yield *, strings
pass
yield *, astral plane strings
pass
yield *, generator instances
pass
yield *, generic iterables
pass
yield *, instances of iterables
pass
yield * on non-iterables is a runtime error
pass
yield *, iterator closing
pass
yield *, iterator closing via throw()
pass
shorthand generator methods
pass
string-keyed shorthand generator methods
pass
computed shorthand generators
pass
shorthand generator methods, classes
pass
computed shorthand generators, classes
pass

BUILT-INS
typed arrays 46/46
Int8Array
pass
Uint8Array
pass
Uint8ClampedArray
pass
Int16Array
pass
Uint16Array
pass
Int32Array
pass
Uint32Array
pass
Float32Array
pass
Float64Array
pass
DataView (Int8)
pass
DataView (Uint8)
pass
DataView (Int16)
pass
DataView (Uint16)
pass
DataView (Int32)
pass
DataView (Uint32)
pass
DataView (Float32)
pass
DataView (Float64)
pass
ArrayBuffer[Symbol.species]
pass
constructors require new
pass
constructors accepts generic iterables
pass
correct prototype chains
pass
%TypedArray%.from
pass
%TypedArray%.of
pass
%TypedArray%.prototype.subarray
pass
%TypedArray%.prototype.join
pass
%TypedArray%.prototype.indexOf
pass
%TypedArray%.prototype.lastIndexOf
pass
%TypedArray%.prototype.slice
pass
%TypedArray%.prototype.every
pass
%TypedArray%.prototype.filter
pass
%TypedArray%.prototype.forEach
pass
%TypedArray%.prototype.map
pass
%TypedArray%.prototype.reduce
pass
%TypedArray%.prototype.reduceRight
pass
%TypedArray%.prototype.reverse
pass
%TypedArray%.prototype.some
pass
%TypedArray%.prototype.sort
pass
%TypedArray%.prototype.copyWithin
pass
%TypedArray%.prototype.find
pass
%TypedArray%.prototype.findIndex
pass
%TypedArray%.prototype.fill
pass
%TypedArray%.prototype.keys
pass
%TypedArray%.prototype.values
pass
%TypedArray%.prototype.entries
pass
%TypedArray%.prototype[Symbol.iterator]
pass
%TypedArray%[Symbol.species]
pass

Map 18/18
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes set
pass
iterator closing
pass
Map.prototype.set returns this
pass
-0 key converts to +0
pass
Map.prototype.size
pass
Map.prototype.delete
pass
Map.prototype.clear
pass
Map.prototype.forEach
pass
Map.prototype.keys
pass
Map.prototype.values
pass
Map.prototype.entries
pass
Map.prototype[Symbol.iterator]
pass
Map iterator prototype chain
pass
Map[Symbol.species]
pass

Set 18/18
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes add
pass
iterator closing
pass
Set.prototype.add returns this
pass
-0 key converts to +0
pass
Set.prototype.size
pass
Set.prototype.delete
pass
Set.prototype.clear
pass
Set.prototype.forEach
pass
Set.prototype.keys
pass
Set.prototype.values
pass
Set.prototype.entries
pass
Set.prototype[Symbol.iterator]
pass
Set iterator prototype chain
pass
Set[Symbol.species]
pass

WeakMap 10/10
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes set
pass
frozen objects as keys
pass
iterator closing
pass
WeakMap.prototype.set returns this
pass
WeakMap.prototype.delete
pass
no WeakMap.prototype.clear method
pass

WeakSet 9/9
basic functionality
pass
constructor arguments
pass
constructor requires new
pass
constructor accepts null
pass
constructor invokes add
pass
iterator closing
pass
WeakSet.prototype.add returns this
pass
WeakSet.prototype.delete
pass
no WeakSet.prototype.clear method
pass

Proxy 20/21
constructor requires new
pass
"get" handler
pass
"get" handler, instances of proxies
pass
"set" handler
pass
"set" handler, instances of proxies
pass
"has" handler
pass
"has" handler, instances of proxies
pass
"deleteProperty" handler
pass
"getOwnPropertyDescriptor" handler
pass
"defineProperty" handler
pass
"getPrototypeOf" handler
pass
"setPrototypeOf" handler
pass
"isExtensible" handler
pass
"preventExtensions" handler
pass
"enumerate" handler
pass
"ownKeys" handler
pass
"apply" handler
pass
"construct" handler
pass
Proxy.revocable
pass
Array.isArray support
pass
JSON.stringify support
fail

Reflect 17/17
Reflect.get
pass
Reflect.set
pass
Reflect.has
pass
Reflect.deleteProperty
pass
Reflect.getOwnPropertyDescriptor
pass
Reflect.defineProperty
pass
Reflect.getPrototypeOf
pass
Reflect.setPrototypeOf
pass
Reflect.isExtensible
pass
Reflect.preventExtensions
pass
Reflect.enumerate
pass
Reflect.ownKeys
pass
Reflect.ownKeys, symbol order
pass
Reflect.apply
pass
Reflect.construct
pass
Reflect.construct sets new.target meta property
pass
Reflect.construct creates instance from newTarget argument
pass

Promise 7/7
basic functionality
pass
constructor requires new
pass
Promise.all
pass
Promise.all, generic iterables
pass
Promise.race
pass
Promise.race, generic iterables
pass
Promise[Symbol.species]
pass

Symbol 10/10
basic functionality
pass
typeof support
pass
symbol keys are hidden to pre-ES6 code
pass
Object.defineProperty support
pass
cannot coerce to string or number
pass
can convert with String()
pass
new Symbol() throws
pass
Object(symbol)
pass
JSON.stringify ignores symbols
pass
global symbol registry
pass

well-known symbols 23/23
Symbol.hasInstance
pass
Symbol.isConcatSpreadable
pass
Symbol.iterator, existence
pass
Symbol.iterator, arguments object
pass
Symbol.species, existence
pass
Symbol.species, Array.prototype.concat
pass
Symbol.species, Array.prototype.filter
pass
Symbol.species, Array.prototype.map
pass
Symbol.species, Array.prototype.slice
pass
Symbol.species, Array.prototype.splice
pass
Symbol.species, RegExp.prototype[Symbol.split]
pass
Symbol.replace
pass
Symbol.search
pass
Symbol.split
pass
Symbol.match
pass
Symbol.match, RegExp constructor
pass
Symbol.match, String.prototype.startsWith
pass
Symbol.match, String.prototype.endsWith
pass
Symbol.match, String.prototype.includes
pass
Symbol.toPrimitive
pass
Symbol.toStringTag
pass
Symbol.toStringTag, misc. built-ins
pass
Symbol.unscopables
pass

BUILT-IN EXTENSIONS
Object static methods 4/4
Object.assign
pass
Object.is
pass
Object.getOwnPropertySymbols
pass
Object.setPrototypeOf
pass

function "name" property 17/17
function statements
pass
function expressions
pass
new Function
pass
bound functions
pass
variables (function)
pass
object methods (function)
pass
accessor properties
pass
shorthand methods
pass
shorthand methods (no lexical binding)
pass
symbol-keyed methods
pass
class statements
pass
class expressions
pass
variables (class)
pass
object methods (class)
pass
class prototype methods
pass
class static methods
pass
isn't writable, is configurable
pass

String static methods 2/2
String.raw
pass
String.fromCodePoint
pass

String.prototype methods 8/8
String.prototype.codePointAt
pass
String.prototype.normalize
pass
String.prototype.repeat
pass
String.prototype.startsWith
pass
String.prototype.endsWith
pass
String.prototype.includes
pass
String.prototype[Symbol.iterator]
pass
String iterator prototype chain
pass

RegExp.prototype properties 6/6
RegExp.prototype.flags
pass
RegExp.prototype[Symbol.match]
pass
RegExp.prototype[Symbol.replace]
pass
RegExp.prototype[Symbol.split]
pass
RegExp.prototype[Symbol.search]
pass
RegExp[Symbol.species]
pass

Array static methods 11/11
Array.from, array-like objects
pass
Array.from, generator instances
pass
Array.from, generic iterables
pass
Array.from, instances of generic iterables
pass
Array.from map function, array-like objects
pass
Array.from map function, generator instances
pass
Array.from map function, generic iterables
pass
Array.from map function, instances of iterables
pass
Array.from, iterator closing
pass
Array.of
pass
Array[Symbol.species]
pass

Array.prototype methods 10/10
Array.prototype.copyWithin
pass
Array.prototype.find
pass
Array.prototype.findIndex
pass
Array.prototype.fill
pass
Array.prototype.keys
pass
Array.prototype.values
pass
Array.prototype.entries
pass
Array.prototype[Symbol.iterator]
pass
Array iterator prototype chain
pass
Array.prototype[Symbol.unscopables]
pass

Number properties 7/7
Number.isFinite
pass
Number.isInteger
pass
Number.isSafeInteger
pass
Number.isNaN
pass
Number.EPSILON
pass
Number.MIN_SAFE_INTEGER
pass
Number.MAX_SAFE_INTEGER
pass

Math methods 17/17
Math.clz32
pass
Math.imul
pass
Math.sign
pass
Math.log10
pass
Math.log2
pass
Math.log1p
pass
Math.expm1
pass
Math.cosh
pass
Math.sinh
pass
Math.tanh
pass
Math.acosh
pass
Math.asinh
pass
Math.atanh
pass
Math.trunc
pass
Math.fround
pass
Math.cbrt
pass
Math.hypot
pass

SUBCLASSING
Array is subclassable 11/11
length property (accessing)
pass
length property (setting)
pass
correct prototype chain
pass
Array.isArray support
pass
Array.prototype.concat
pass
Array.prototype.filter
pass
Array.prototype.map
pass
Array.prototype.slice
pass
Array.prototype.splice
pass
Array.from
pass
Array.of
pass

RegExp is subclassable 4/4
basic functionality
pass
correct prototype chain
pass
RegExp.prototype.exec
pass
RegExp.prototype.test
pass

Function is subclassable 6/6
can be called
pass
correct prototype chain
pass
can be used with "new"
pass
Function.prototype.call
pass
Function.prototype.apply
pass
Function.prototype.bind
pass

Promise is subclassable 4/4
basic functionality
pass
correct prototype chain
pass
Promise.all
pass
Promise.race
pass

miscellaneous subclassables 5/5
Boolean is subclassable
pass
Number is subclassable
pass
String is subclassable
pass
Map is subclassable
pass
Set is subclassable
pass

MISC
prototype of bound functions 5/5
basic functions
pass
generator functions
pass
arrow functions
pass
classes
pass
subclasses
pass

Proxy, internal 'get' calls 33/35
ToPrimitive
pass
CreateListFromArrayLike
pass
instanceof operator
pass
HasBinding
pass
CreateDynamicFunction
pass
ClassDefinitionEvaluation
pass
IteratorComplete, IteratorValue
pass
ToPropertyDescriptor
pass
Object.assign
pass
Object.defineProperties
pass
Function.prototype.bind
pass
Error.prototype.toString
pass
String.raw
fail
RegExp constructor
pass
RegExp.prototype.flags
pass
RegExp.prototype.test
pass
RegExp.prototype[Symbol.match]
pass
RegExp.prototype[Symbol.replace]
pass
RegExp.prototype[Symbol.search]
pass
RegExp.prototype[Symbol.split]
pass
Array.from
pass
Array.prototype.concat
pass
Array.prototype iteration methods
pass
Array.prototype.pop
pass
Array.prototype.reverse
pass
Array.prototype.shift
pass
Array.prototype.splice
pass
Array.prototype.toString
pass
JSON.stringify
fail
Promise resolve functions
pass
String.prototype.match
pass
String.prototype.replace
pass
String.prototype.search
pass
String.prototype.split
pass
Date.prototype.toJSON
pass

Proxy, internal 'set' calls 11/11
Object.assign
pass
Array.from
pass
Array.of
pass
Array.prototype.copyWithin
pass
Array.prototype.fill
pass
Array.prototype.pop
pass
Array.prototype.push
pass
Array.prototype.reverse
pass
Array.prototype.shift
pass
Array.prototype.splice
pass
Array.prototype.unshift
pass

Proxy, internal 'defineProperty' calls 1/2
[[Set]]
fail
SetIntegrityLevel
pass

Proxy, internal 'deleteProperty' calls 6/6
Array.prototype.copyWithin
pass
Array.prototype.pop
pass
Array.prototype.reverse
pass
Array.prototype.shift
pass
Array.prototype.splice
pass
Array.prototype.unshift
pass

Proxy, internal 'getOwnPropertyDescriptor' calls 3/4
[[Set]]
fail
Object.assign
pass
Object.prototype.hasOwnProperty
pass
Function.prototype.bind
pass

Proxy, internal 'ownKeys' calls 3/3
SetIntegrityLevel
pass
TestIntegrityLevel
pass
SerializeJSONObject
pass

Object static methods accept primitives 10/10
Object.getPrototypeOf
pass
Object.getOwnPropertyDescriptor
pass
Object.getOwnPropertyNames
pass
Object.seal
pass
Object.freeze
pass
Object.preventExtensions
pass
Object.isSealed
pass
Object.isFrozen
pass
Object.isExtensible
pass
Object.keys
pass

own property order 8/8
for..in
pass
Object.keys
pass
Object.getOwnPropertyNames
pass
Object.assign
pass
JSON.stringify
pass
JSON.parse
pass
Reflect.ownKeys, string key order
pass
Reflect.ownKeys, symbol key order
pass

miscellaneous 9/10
no escaped reserved words as identifiers
pass
duplicate property names in strict mode
pass
no semicolon needed after do-while
pass
no assignments allowed in for-in head
pass
accessors aren't constructors
pass
Invalid Date
pass
RegExp constructor can alter flags
pass
built-in prototypes are not instances
fail
function 'length' is configurable
pass
String.prototype case methods, Unicode support
pass

ANNEX B
non-strict function semantics 2/3
hoisted block-level function declaration
fail
labeled function statements
pass
function statements in if-statement clauses
pass

__proto__ in object literals 5/5
basic support
pass
multiple __proto__ is an error
pass
not a computed property
pass
not a shorthand property
pass
not a shorthand method
pass

Object.prototype.__proto__ 6/6
get prototype
pass
set prototype
pass
absent from Object.create(null)
pass
present in hasOwnProperty()
pass
correct property descriptor
pass
present in Object.getOwnPropertyNames()
pass

String.prototype HTML methods 0/3
existence
fail
tags' names are lowercase
fail
quotes in arguments are escaped
fail

RegExp.prototype.compile 1/1
pass

RegExp syntax extensions 5/8
hyphens in character sets
pass
invalid character escapes
fail
invalid control-character escapes
fail
invalid Unicode escapes
pass
invalid hexadecimal escapes
fail
incomplete patterns and quantifiers
pass
octal escape sequences
pass
invalid backreferences become octal escapes
pass

HTML-style comments 0/1
fail

ES6 Compatibility (416/427)

OPTIMISATION
proper tail calls (tail call optimisation) 2/2
direct recursion
pass
mutual recursion
pass

SYNTAX
default function parameters 6/6
basic functionality
pass
explicit undefined defers to the default
pass
defaults can refer to previous params
pass
temporal dead zone
pass
separate scope
pass
new Function() support
pass

rest parameters 5/5
basic functionality
pass
function 'length' property
pass
arguments object interaction
pass
can't be used in setters
pass
new Function() support
pass

spread (...) operator 10/10
with arrays, in function calls
pass
with arrays, in array literals
pass
with strings, in function calls
pass
with strings, in array literals
pass
with astral plane strings, in function calls
pass
with astral plane strings, in array literals
pass
with generic iterables, in calls
pass
with generic iterables, in arrays
pass
with instances of iterables, in calls
pass
with instances of iterables, in arrays
pass

object literal extensions 6/6
computed properties
pass
shorthand properties
pass
shorthand methods
pass
string-keyed shorthand methods
pass
computed shorthand methods
pass
computed accessors
pass

for..of loops 7/7
with arrays
pass
with strings
pass
with astral plane strings
pass
with generic iterables
pass
with instances of generic iterables
pass
iterator closing, break
pass
iterator closing, throw
pass

octal and binary literals 4/4
octal literals
pass
binary literals
pass
octal supported by Number()
pass
binary supported by Number()
pass

template strings 2/2
basic functionality
pass
tagged template strings
pass

RegExp "y" and "u" flags 0/2
"y" flag
fail
"u" flag
fail

destructuring 29/30
with arrays
pass
with strings
pass
with astral plane strings
pass
with generic iterables
pass
with instances of generic iterables
pass
iterator closing
pass
iterable destructuring expression
pass
chained iterable destructuring
pass
trailing commas in iterable patterns
pass
with objects
pass
object destructuring with primitives
pass
trailing commas in object patterns
pass
object destructuring expression
pass
chained object destructuring
pass
throws on null and undefined
pass
computed properties
pass
multiples in a single var statement
pass
nested
pass
in parameters
pass
in parameters, new Function() support
pass
in parameters, function 'length' property
pass
in for-in loop heads
pass
in for-of loop heads
pass
rest
pass
nested rest
fail
defaults
pass
defaults in parameters
pass
defaults, let temporal dead zone
pass
defaults in parameters, separate scope
pass
defaults in parameters, new Function() support
pass

Unicode code point escapes 0/2
in strings
fail
in identifiers
fail

new.target 2/2
in constructors
pass
can't be assigned to
pass

Binding
const 8/8
basic support
pass
is block-scoped
pass
redefining a const is an error
pass
temporal dead zone
pass
basic support (strict mode)
pass
is block-scoped (strict mode)
pass
redefining a const (strict mode)
pass
temporal dead zone (strict mode)
pass

let 10/10
basic support
pass
is block-scoped
pass
for-loop statement scope
pass
temporal dead zone
pass
for-loop iteration scope
pass
basic support (strict mode)
pass
is block-scoped (strict mode)
pass
for-loop statement scope (strict mode)
pass
temporal dead zone (strict mode)
pass
for-loop iteration scope (strict mode)
pass

block-level function declaration 1/1
pass

Functions
arrow functions 11/11
0 parameters
pass
1 parameter, no brackets
pass
multiple parameters
pass
lexical "this" binding
pass
"this" unchanged by call or apply
pass
can't be bound, can be curried
pass
lexical "arguments" binding
pass
no line break between params and <code>=></code>
pass
no "prototype" property
pass
lexical "super" binding
pass
lexical "new.target" binding
pass

class 23/23
class statement
pass
is block-scoped
pass
class expression
pass
anonymous class
pass
constructor
pass
prototype methods
pass
string-keyed methods
pass
computed prototype methods
pass
static methods
pass
computed static methods
pass
accessor properties
pass
computed accessor properties
pass
static accessor properties
pass
computed static accessor properties
pass
class name is lexically scoped
pass
computed names, temporal dead zone
pass
methods aren't enumerable
pass
implicit strict mode
pass
constructor requires new
pass
extends
pass
extends expressions
pass
extends null
pass
new.target
pass

super 7/7
statement in constructors
pass
expression in constructors
pass
in methods, property access
pass
in methods, method calls
pass
method calls use correct "this" binding
pass
constructor calls use correct "new.target" binding
pass
is statically bound
pass

generators 21/21
basic functionality
pass
generator function expressions
pass
correct "this" binding
pass
can't use "this" with new
pass
sending
pass
%GeneratorPrototype%
pass
%GeneratorPrototype%.throw
pass
%GeneratorPrototype%.return
pass
yield operator precedence
pass
yield *, arrays
pass
yield *, strings
pass
yield *, astral plane strings
pass
yield *, generic iterables
pass
yield *, instances of iterables
pass
yield *, iterator closing
pass
yield *, iterator closing via throw()
pass
shorthand generator methods
pass
string-keyed shorthand generator methods
pass
computed shorthand generators
pass
shorthand generator methods, classes
pass
computed shorthand generators, classes
pass

Built-ins
typed arrays 40/40
Int8Array
pass
Uint8Array
pass
Uint8ClampedArray
pass
Int16Array
pass
Uint16Array
pass
Int32Array
pass
Uint32Array
pass
Float32Array
pass
Float64Array
pass
DataView (Int8)
pass
DataView (Uint8)
pass
DataView (Int16)
pass
DataView (Uint16)
pass
DataView (Int32)
pass
DataView (Uint32)
pass
DataView (Float32)
pass
DataView (Float64)
pass
%TypedArray%.from
pass
%TypedArray%.of
pass
%TypedArray%.prototype.subarray
pass
%TypedArray%.prototype.join
pass
%TypedArray%.prototype.indexOf
pass
%TypedArray%.prototype.lastIndexOf
pass
%TypedArray%.prototype.slice
pass
%TypedArray%.prototype.every
pass
%TypedArray%.prototype.filter
pass
%TypedArray%.prototype.forEach
pass
%TypedArray%.prototype.map
pass
%TypedArray%.prototype.reduce
pass
%TypedArray%.prototype.reduceRight
pass
%TypedArray%.prototype.reverse
pass
%TypedArray%.prototype.some
pass
%TypedArray%.prototype.sort
pass
%TypedArray%.prototype.copyWithin
pass
%TypedArray%.prototype.find
pass
%TypedArray%.prototype.findIndex
pass
%TypedArray%.prototype.fill
pass
%TypedArray%.prototype.keys
pass
%TypedArray%.prototype.values
pass
%TypedArray%.prototype.entries
pass

Map 12/12
basic functionality
pass
constructor arguments
pass
iterator closing
pass
Map.prototype.set returns this
pass
-0 key converts to +0
pass
Map.prototype.size
pass
Map.prototype.delete
pass
Map.prototype.clear
pass
Map.prototype.forEach
pass
Map.prototype.keys
pass
Map.prototype.values
pass
Map.prototype.entries
pass

Set 12/12
basic functionality
pass
constructor arguments
pass
iterator closing
pass
Set.prototype.add returns this
pass
-0 key converts to +0
pass
Set.prototype.size
pass
Set.prototype.delete
pass
Set.prototype.clear
pass
Set.prototype.forEach
pass
Set.prototype.keys
pass
Set.prototype.values
pass
Set.prototype.entries
pass

WeakMap 6/6
basic functionality
pass
constructor arguments
pass
iterator closing
pass
WeakMap.prototype.set returns this
pass
WeakMap.prototype.delete
pass
Support frozen objects as keys
pass

WeakSet 5/5
basic functionality
pass
constructor arguments
pass
iterator closing
pass
WeakSet.prototype.add returns this
pass
WeakSet.prototype.delete
pass

Proxy 19/20
"get" handler
pass
"get" handler, instances of proxies
pass
"set" handler
pass
"set" handler, instances of proxies
pass
"has" handler
pass
"has" handler, instances of proxies
pass
"deleteProperty" handler
pass
"getOwnPropertyDescriptor" handler
pass
"defineProperty" handler
pass
"getPrototypeOf" handler
pass
"setPrototypeOf" handler
pass
"isExtensible" handler
pass
"preventExtensions" handler
pass
"enumerate" handler
pass
"ownKeys" handler
pass
"apply" handler
pass
"construct" handler
pass
Proxy.revocable
pass
Array.isArray support
pass
JSON.stringify support
fail

Reflect 16/16
Reflect.get
pass
Reflect.set
pass
Reflect.has
pass
Reflect.deleteProperty
pass
Reflect.getOwnPropertyDescriptor
pass
Reflect.defineProperty
pass
Reflect.getPrototypeOf
pass
Reflect.setPrototypeOf
pass
Reflect.isExtensible
pass
Reflect.preventExtensions
pass
Reflect.enumerate
pass
Reflect.ownKeys
pass
Reflect.ownKeys, symbol order
pass
Reflect.apply
pass
Reflect.construct
pass
Reflect.construct, new.target
pass

Promise 3/3
basic functionality
pass
Promise.all
pass
Promise.race
pass

Symbol 9/9
basic functionality
pass
typeof support
pass
symbol keys are hidden to pre-ES6 code
pass
Object.defineProperty support
pass
cannot coerce to string or number
pass
can convert with String()
pass
new Symbol() throws
pass
Object(symbol)
pass
global symbol registry
pass

well-known symbols 7/7
Symbol.hasInstance
pass
Symbol.isConcatSpreadable
pass
Symbol.iterator
pass
Symbol.species
pass
Symbol.toPrimitive
pass
Symbol.toStringTag
pass
Symbol.unscopables
pass

Built-in extensions
Object static methods 4/4
Object.assign
pass
Object.is
pass
Object.getOwnPropertySymbols
pass
Object.setPrototypeOf
pass

function "name" property 17/17
function statements
pass
function expressions
pass
new Function
pass
bound functions
pass
variables (function)
pass
object methods (function)
pass
accessor properties
pass
shorthand methods
pass
shorthand methods (no lexical binding)
pass
symbol-keyed methods
pass
class statements
pass
class expressions
pass
variables (class)
pass
object methods (class)
pass
class prototype methods
pass
class static methods
pass
isn't writable, is configurable
pass

String static methods 2/2
String.raw
pass
String.fromCodePoint
pass

String.prototype methods 6/6
String.prototype.codePointAt
pass
String.prototype.normalize
pass
String.prototype.repeat
pass
String.prototype.startsWith
pass
String.prototype.endsWith
pass
String.prototype.includes
pass

RegExp.prototype properties 5/5
RegExp.prototype.flags
pass
RegExp.prototype[Symbol.match]
pass
RegExp.prototype[Symbol.replace]
pass
RegExp.prototype[Symbol.split]
pass
RegExp.prototype[Symbol.search]
pass

Array static methods 8/8
Array.from, array-like objects
pass
Array.from, generic iterables
pass
Array.from, instances of generic iterables
pass
Array.from map function, array-like objects
pass
Array.from map function, generic iterables
pass
Array.from map function, instances of iterables
pass
Array.from, iterator closing
pass
Array.of
pass

Array.prototype methods 8/8
Array.prototype.copyWithin
pass
Array.prototype.find
pass
Array.prototype.findIndex
pass
Array.prototype.fill
pass
Array.prototype.keys
pass
Array.prototype.values
pass
Array.prototype.entries
pass
Array.prototype[Symbol.unscopables]
pass

Number properties 7/7
Number.isFinite
pass
Number.isInteger
pass
Number.isSafeInteger
pass
Number.isNaN
pass
Number.EPSILON
pass
Number.MIN_SAFE_INTEGER
pass
Number.MAX_SAFE_INTEGER
pass

Math methods 17/17
Math.clz32
pass
Math.imul
pass
Math.sign
pass
Math.log10
pass
Math.log2
pass
Math.log1p
pass
Math.expm1
pass
Math.cosh
pass
Math.sinh
pass
Math.tanh
pass
Math.acosh
pass
Math.asinh
pass
Math.atanh
pass
Math.trunc
pass
Math.fround
pass
Math.cbrt
pass
Math.hypot
pass

Subclassing
Array is subclassable 5/5
basic functionality
pass
correct prototype chain
pass
Array.prototype.slice
pass
Array.from
pass
Array.of
pass

RegExp is subclassable 4/4
basic functionality
pass
correct prototype chain
pass
RegExp.prototype.exec
pass
RegExp.prototype.test
pass

Function is subclassable 6/6
can be called
pass
correct prototype chain
pass
can be used with "new"
pass
Function.prototype.call
pass
Function.prototype.apply
pass
Function.prototype.bind
pass

Promise is subclassable 4/4
basic functionality
pass
correct prototype chain
pass
Promise.all
pass
Promise.race
pass

miscellaneous subclassables 5/5
Boolean is subclassable
pass
Number is subclassable
pass
String is subclassable
pass
Map is subclassable
pass
Set is subclassable
pass

Misc
Object static methods accept primitives 10/10
Object.getPrototypeOf
pass
Object.getOwnPropertyDescriptor
pass
Object.getOwnPropertyNames
pass
Object.seal
pass
Object.freeze
pass
Object.preventExtensions
pass
Object.isSealed
pass
Object.isFrozen
pass
Object.isExtensible
pass
Object.keys
pass

own property order 6/6
for..in
pass
Object.keys
pass
Object.getOwnPropertyNames
pass
Object.assign
pass
JSON.stringify
pass
JSON.parse
pass

miscellaneous 7/8
no escaped reserved words as identifiers
pass
duplicate property names in strict mode
pass
no semicolon needed after do-while
pass
no assignments allowed in for-in head
pass
accessors aren't constructors
pass
Invalid Date
pass
RegExp constructor can alter flags
pass
built-in prototypes are not instances
fail

Annex b
hoisted block-level function declaration 0/1
fail

__proto__ in object literals 5/5
basic support
pass
multiple __proto__ is an error
pass
not a computed property
pass
not a shorthand property
pass
not a shorthand method
pass

Object.prototype.__proto__ 6/6
get prototype
pass
set prototype
pass
absent from Object.create(null)
pass
present in hasOwnProperty()
pass
correct property descriptor
pass
present in Object.getOwnPropertyNames()
pass

String.prototype HTML methods 0/3
existence
fail
tags' names are lowercase
fail
quotes in arguments are escaped
fail

RegExp.prototype.compile 1/1
pass

Notes on Test Failures

With XS6 so close to passing all the ES6 compatibility tests, it is interesting to review the tests that it does not pass. The Kinoma team is committed to resolving as many of these as possible, although achieving 100% may be impractical.

Further information about the failed tests is provided below (in the same order as listed in the table above).

SYNTAX

RegExp "y" and "u" flags

   "u" flag
   "u" flag, Unicode code point escapes

Regular expressions in XS6 are implemented using PCRE. XS6 is not using the most recent version of PCRE. It may be possible to update to the most recent, although doing so may adversely affect runtime memory requirements. This is under investigation.

FUNCTIONS

arrow functions

   correct precedence

This failure is due to a syntactical issue in the XS6 parser. It will be fixed.

MISC

miscellaneous

   built-in prototypes are not instances

XS6 implements the built-in prototypes as host instances. This is under investigation.

ANNEX B

non-strict function semantics

   hoisted block-level function declaration

This may be a matter of interpretation in the specification, as XS6 gives results similar to V8. This is under investigation.

String.prototype HTML methods

   existence
   tags' names are lowercase
   quotes in arguments are escaped

Because XS6 is designed to be embedded in hardware devices and applications rather than to operate inside a web browser, there is no practical need to support these HTML-specific features.

Note: The implementation of XS6 is largely platform-independent, so results are consistent across host platforms. XS6 does rely on services of the host platform to perform some operations, including string case conversion on Mac OS X and Windows for the String.prototype.normalize, String.prototype.toLowerCase, and String.prototype.toUpperCase functions. The results for tests that use these functions may vary depending on the host platform.

RegExp syntax extensions

   invalid character escapes
   invalid control-character escapes
   invalid hexadecimal escapes

See RegExp "y" and "u" flags.

HTML-style comments

See String.prototype HTML methods, above.