diff --git a/harness/sm/non262-Temporal-PlainMonthDay-shell.js b/harness/sm/non262-Temporal-PlainMonthDay-shell.js index 98e977bb474..76bf834fa9f 100644 --- a/harness/sm/non262-Temporal-PlainMonthDay-shell.js +++ b/harness/sm/non262-Temporal-PlainMonthDay-shell.js @@ -4,7 +4,7 @@ allow_unused: True ---*/ function ISOFields(monthDay) { - let re = /^(?\d{4,6})-(?\d{2})-(?\d{2})\[u-ca=(?[\w\-]+)\]$/; + let re = /^(?-?\d{4,6})-(?\d{2})-(?\d{2})\[u-ca=(?[\w\-]+)\]$/; let str = monthDay.toString({calendarName: "always"}); let match = str.match(re); diff --git a/test/staging/sm/AsyncIterator/asynciterator.js b/test/staging/sm/AsyncIterator/asynciterator.js deleted file mode 100644 index af300605551..00000000000 --- a/test/staging/sm/AsyncIterator/asynciterator.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - Property descriptor of AsyncIterator. - - AsyncIterator is not enabled unconditionally -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(this, 'AsyncIterator'); -assert.sameValue(propDesc.value, AsyncIterator); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/constructor-subclassable.js b/test/staging/sm/AsyncIterator/constructor-subclassable.js deleted file mode 100644 index 76063c91e29..00000000000 --- a/test/staging/sm/AsyncIterator/constructor-subclassable.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - AsyncIterator constructor can be subclassed. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -class TestIterator extends AsyncIterator { -} - -assert.sameValue(new TestIterator() instanceof AsyncIterator, true); - diff --git a/test/staging/sm/AsyncIterator/constructor-throw-when-called-directly.js b/test/staging/sm/AsyncIterator/constructor-throw-when-called-directly.js deleted file mode 100644 index 1c2c198cc01..00000000000 --- a/test/staging/sm/AsyncIterator/constructor-throw-when-called-directly.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - AsyncIterator constructor throws when called directly. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -assertThrowsInstanceOf(() => new AsyncIterator(), TypeError); - diff --git a/test/staging/sm/AsyncIterator/constructor-throw-without-new.js b/test/staging/sm/AsyncIterator/constructor-throw-without-new.js deleted file mode 100644 index fe7d86c6bdf..00000000000 --- a/test/staging/sm/AsyncIterator/constructor-throw-without-new.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - AsyncIterator constructor throws when called without new. - - AsyncIterator is not enabled unconditionally -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -assertThrowsInstanceOf(() => AsyncIterator(), TypeError); - diff --git a/test/staging/sm/AsyncIterator/constructor.js b/test/staging/sm/AsyncIterator/constructor.js deleted file mode 100644 index a6210161476..00000000000 --- a/test/staging/sm/AsyncIterator/constructor.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - The AsyncIterator constructor is a built-in function. - - AsyncIterator is not enabled unconditionally -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -assert.sameValue(typeof AsyncIterator, 'function'); - diff --git a/test/staging/sm/AsyncIterator/length.js b/test/staging/sm/AsyncIterator/length.js deleted file mode 100644 index 29148b98a6d..00000000000 --- a/test/staging/sm/AsyncIterator/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - The "length" property of AsyncIterator - - AsyncIterator is not enabled unconditionally -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator, 'length'); -assert.sameValue(propDesc.value, 0); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/name.js b/test/staging/sm/AsyncIterator/name.js deleted file mode 100644 index 140ab86e6b9..00000000000 --- a/test/staging/sm/AsyncIterator/name.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - The "name" property of AsyncIterator - - AsyncIterator is not enabled unconditionally -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator, 'name'); -assert.sameValue(propDesc.value, 'AsyncIterator'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/proto.js b/test/staging/sm/AsyncIterator/proto.js deleted file mode 100644 index 1b0c6c7c127..00000000000 --- a/test/staging/sm/AsyncIterator/proto.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - The prototype of the AsyncIterator constructor is the intrinsic object %FunctionPrototype%. - - AsyncIterator is not enabled unconditionally -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -assert.sameValue(Object.getPrototypeOf(AsyncIterator), Function.prototype); - -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator, 'prototype'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, false); - diff --git a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/asIndexedPairs.js b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/asIndexedPairs.js deleted file mode 100644 index 40f97095cc2..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/asIndexedPairs.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -let iter = gen().asIndexedPairs(); - -for (const v of [[0, 1], [1, 2], [2, 3]]) { - iter.next().then( - result => { - assert.sameValue(result.done, false); - assert.sameValue(result.value[0], v[0]); - assert.sameValue(result.value[1], v[1]); - } - ); -} - -iter.next().then(({done}) => assert.sameValue(done, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/length.js b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/length.js deleted file mode 100644 index 33919d3bddb..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/length.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.asIndexedPairs length value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -assert.sameValue(AsyncIterator.prototype.asIndexedPairs.length, 0); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.asIndexedPairs, 'length'); -assert.sameValue(propertyDescriptor.value, 0); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/name.js b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/name.js deleted file mode 100644 index d4820c42689..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/name.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.asIndexedPairs.name value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -assert.sameValue(AsyncIterator.prototype.asIndexedPairs.name, 'asIndexedPairs'); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.asIndexedPairs, 'name'); -assert.sameValue(propertyDescriptor.value, 'asIndexedPairs'); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/async-iterator-helpers-from-other-global.js b/test/staging/sm/AsyncIterator/prototype/async-iterator-helpers-from-other-global.js deleted file mode 100644 index f0d99cdecbc..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/async-iterator-helpers-from-other-global.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} - -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 'value'}; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -function checkIterResult({done, value}, expectedDone, expectedValue) { - assert.sameValue(done, expectedDone); - assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); -} - -const otherGlobal = createNewGlobal({newCompartment: true}); - -const methods = [ - ["map", x => x], - ["filter", x => true], - ["take", Infinity], - ["drop", 0], - ["asIndexedPairs", undefined], - ["flatMap", async function*(x) { yield x; }], -]; - -const {next: otherNext, return: otherReturn, throw: otherThrow} = - Object.getPrototypeOf(otherGlobal.eval("(async function*() {})().map(x => x)")); - -(async () => { - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - const helper = iterator[method](arg); - checkIterResult(await otherNext.call(helper), false, 'value'); - } - - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - const helper = iterator[method](arg); - assert.sameValue(iterator.closed, false); - checkIterResult(await otherReturn.call(helper), true, undefined); - assert.sameValue(iterator.closed, true); - } - - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - const helper = iterator[method](arg); - try { - await otherThrow.call(helper, new TestError()); - assert.sameValue(true, false, 'Expected exception'); - } catch (exc) { - assert.sameValue(exc instanceof TestError, true); - } - checkIterResult(await helper.next(), true, undefined); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/clobber-symbol.js b/test/staging/sm/AsyncIterator/prototype/clobber-symbol.js deleted file mode 100644 index 06565cfa873..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/clobber-symbol.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype% methods work even if the global Symbol has been clobbered. -info: | - Iterator Helpers proposal 2.1.6 -features: -- Symbol.asyncIterator -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// -// - -Symbol = undefined; -assertThrowsInstanceOf(() => Symbol.asyncIterator, TypeError); - -async function* gen(value) { - yield value; -} - -const lazyMethods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -const strictMethods = [ - iter => iter.reduce((_, x) => x, undefined), - iter => iter.toArray(), - iter => iter.forEach(() => undefined), - iter => iter.some(x => true), - iter => iter.every(x => true), - iter => iter.find(x => true), -]; - -(async () => { - for (const method of lazyMethods) { - const {value} = await method(gen('value')).next(); - assert.sameValue(Array.isArray(value) ? value[1] : value, 'value'); - } - - for (const method of strictMethods) { - await method(gen('value')); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/drop/drop-more-than-available.js b/test/staging/sm/AsyncIterator/prototype/drop/drop-more-than-available.js deleted file mode 100644 index 3b64a39ea01..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/drop/drop-more-than-available.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.drop returns if the iterator is done. -info: | - Iterator Helpers proposal 2.1.6.5 1. Repeat, while remaining > 0, - ... - b. Let next be ? Await(? IteratorStep(iterated)). - c. If ? IteratorComplete(next) is true, return undefined. -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - counter = 0; - async next() { - return {done: ++this.counter >= 2, value: undefined}; - } -} - -(async () => { - let iter = [1, 2].values().drop(3); - let result = await iter.next(); - assert.sameValue(result.value, undefined); - assert.sameValue(result.done, true); - - iter = new TestIterator(); - let dropped = iter.drop(10); - result = await dropped.next(); - assert.sameValue(result.value, undefined); - assert.sameValue(result.done, true); - assert.sameValue(iter.counter, 2); -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/drop/drop.js b/test/staging/sm/AsyncIterator/prototype/drop/drop.js deleted file mode 100644 index 224e5eb3ee1..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/drop/drop.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -let iter = gen().drop(1); - -for (const v of [2, 3]) { - iter.next().then( - ({done, value}) => { - assert.sameValue(done, false); - assert.sameValue(value, v); - } - ); -} - -iter.next().then(({done}) => assert.sameValue(done, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/drop/length.js b/test/staging/sm/AsyncIterator/prototype/drop/length.js deleted file mode 100644 index dba4cc53062..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/drop/length.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.drop length value and descriptor. -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -assert.sameValue(AsyncIterator.prototype.drop.length, 1); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.drop, 'length'); -assert.sameValue(propertyDescriptor.value, 1); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/drop/name.js b/test/staging/sm/AsyncIterator/prototype/drop/name.js deleted file mode 100644 index 9158234e928..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/drop/name.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.drop.name value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -assert.sameValue(AsyncIterator.prototype.drop.name, 'drop'); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.drop, 'name'); -assert.sameValue(propertyDescriptor.value, 'drop'); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/async-writes.js b/test/staging/sm/AsyncIterator/prototype/every/async-writes.js deleted file mode 100644 index d95d33e8b31..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/async-writes.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let x = {a: () => true}; - -async function* gen() { - yield x.a(); - yield x.a(); -} - -gen().every(() => true).then( - () => assert.sameValue(true, false, 'expected error'), - err => assert.sameValue(err instanceof Error, true), -); - -x.a = () => { - throw Error(); -}; - diff --git a/test/staging/sm/AsyncIterator/prototype/every/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/every/check-fn-after-getting-iterator.js deleted file mode 100644 index e5860a831cb..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/check-fn-after-getting-iterator.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({done: true}); - } -} - -async function* gen() { - yield 1; -} - -const iter = new Proxy(new TestIterator(), handlerProxy); -iter.every(1).then(() => assert.sameValue(true, false, 'expected error'), err => assert.sameValue(err instanceof TypeError, true)); - -assert.sameValue( - log.join('\n'), - `get: every -get: next` -); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/every/coerce-result-to-boolean.js deleted file mode 100644 index bf4261991a8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/coerce-result-to-boolean.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -features: -- IsHTMLDDA -- async-iteration -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -description: | - pending -esid: pending ----*/ - -async function* gen(value) { - yield value; -} -const fn = x => x; -function check(value, expected) { - gen(value).every(fn).then(result => assert.sameValue(result, expected)); -} - -check(true, true); -check(1, true); -check([], true); -check({}, true); -check('test', true); - -check(false, false); -check(0, false); -check('', false); -check(null, false); -check(undefined, false); -check(NaN, false); -check(-0, false); -check(0n, false); -check(createIsHTMLDDA(), false); -check(Promise.resolve(false), false); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/descriptor.js b/test/staging/sm/AsyncIterator/prototype/every/descriptor.js deleted file mode 100644 index 1befd8b84ee..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/descriptor.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'every'); -assert.sameValue(typeof propDesc.value, 'function'); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/every/error-from-correct-realm.js deleted file mode 100644 index 533bb81ce30..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/error-from-correct-realm.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const otherGlobal = createNewGlobal({newCompartment: true}); -assert.sameValue(TypeError !== otherGlobal.TypeError, true); - -async function *gen() {} - -gen().every().then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); -}); - -otherGlobal.AsyncIterator.prototype.every.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue( - err instanceof otherGlobal.TypeError, - true, - 'TypeError comes from the realm of the method.', - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/every/fn-not-callable-throws.js deleted file mode 100644 index b345e4a825b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/fn-not-callable-throws.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function *gen() { - yield 1; -} - -function check(fn) { - gen().every(fn).then(() => { - throw new Error('every should have thrown'); - }, - (err) => { - assert.sameValue(err instanceof TypeError, true); - }); -} - -check(); -check(undefined); -check(null); -check(0); -check(false); -check(''); -check(Symbol('')); -check({}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/every/fn-throws-close-iterator.js deleted file mode 100644 index 0ef5a242811..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/fn-throws-close-iterator.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ done: this.closed }); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => { throw new Error(); }; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.every(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/every/interleaving-calls.js deleted file mode 100644 index b65b39bc850..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/interleaving-calls.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const log = []; -async function* gen(n) { - log.push(`${n}`); - yield 1; - log.push(`${n}`); - yield 2; -} - -Promise.all([gen(1).every(() => true), gen(2).every(() => true)]).then( - () => { - assert.sameValue( - log.join(' '), - '1 2 1 2', - ); - }, - err => { - throw err; - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/length.js b/test/staging/sm/AsyncIterator/prototype/every/length.js deleted file mode 100644 index 603b56c51f0..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - The `length` property of AsyncIterator.prototype.every. -info: | - ES7 section 17: Unless otherwise specified, the length property of a built-in - Function object has the attributes { [[Writable]]: false, [[Enumerable]]: - false, [[Configurable]]: true }. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.every, 'length'); -assert.sameValue(propDesc.value, 1); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/name.js b/test/staging/sm/AsyncIterator/prototype/every/name.js deleted file mode 100644 index de3695890e0..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/name.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - `name` property of AsyncIterator.prototype.every. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.every, 'name'); -assert.sameValue(propDesc.value, 'every'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/every/next-throws-iterator-not-closed.js deleted file mode 100644 index 91804d42557..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/next-throws-iterator-not-closed.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - throw new Error(); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => {}; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.every(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, false); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/proxy.js b/test/staging/sm/AsyncIterator/prototype/every/proxy.js deleted file mode 100644 index b0d47327cd9..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/proxy.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -// -// This test checks that %AsyncIterator.prototype%.every only gets the `next` method off of the -// iterator once, and never accesses the @@asyncIterator property. -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class Counter extends AsyncIterator { - value = 0; - next() { - const value = this.value; - if (value < 2) { - this.value = value + 1; - return Promise.resolve({done: false, value}); - } - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new Counter(), handlerProxy); -iter.every(x => x % 2 == 0).then(value => { - assert.sameValue(value, false) - - assert.sameValue( - log.join('\n'), - `get: every -get: next -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: return` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/return-true-if-all-match.js b/test/staging/sm/AsyncIterator/prototype/every/return-true-if-all-match.js deleted file mode 100644 index 05b34832bac..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/return-true-if-all-match.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 3; - yield 5; -} -const fn = x => x % 2 == 1; - -gen().every(fn).then(result => assert.sameValue(result, true)); - -async function* empty() {} -empty().every(x => x).then(result => assert.sameValue(result, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/short-circuit-on-false.js b/test/staging/sm/AsyncIterator/prototype/every/short-circuit-on-false.js deleted file mode 100644 index 6ecf8b404d5..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/short-circuit-on-false.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -const log = []; -const fn = value => { - log.push(value.toString()); - return value % 2 == 1; -}; - -gen().every(fn).then(result => { - assert.sameValue(result, false); - assert.sameValue(log.join(','), '1,2'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/every/this-not-iterator-throws.js deleted file mode 100644 index 5f14d22c322..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/this-not-iterator-throws.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const fn = x => x; - -function check(x) { - AsyncIterator.prototype.every.call(x, fn).then( - () => { - throw new Error('check should have been rejected'); - }, - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check({}); -check({next: 0}); - diff --git a/test/staging/sm/AsyncIterator/prototype/every/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/every/value-throws-iterator-not-closed.js deleted file mode 100644 index 1fe2de45dbe..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/every/value-throws-iterator-not-closed.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ - done: false, - get value() { - throw new TestError(); - } - }); - } - - closed = false; - return() { - closed = true; - } -} - -const iterator = new TestIterator(); -assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); -iterator.every(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/filter/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/filter/coerce-result-to-boolean.js deleted file mode 100644 index e2ba13648b8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/filter/coerce-result-to-boolean.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -features: -- IsHTMLDDA -- async-iteration -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -description: | - pending -esid: pending ----*/ - -async function* gen(iterable) { - yield* iterable; -} - -// All truthy values are kept. -const truthyValues = [true, 1, [], {}, 'test']; -(async () => { - for await (const value of gen([...truthyValues]).filter(x => x)) { - assert.sameValue(truthyValues.shift(), value); - } -})(); - -// All falsy values are filtered out. -const falsyValues = [false, 0, '', null, undefined, NaN, -0, 0n, createIsHTMLDDA()]; -gen(falsyValues).filter(x => x).next().then( - ({done, value}) => { - assert.sameValue(done, true); - assert.sameValue(value, undefined); - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/filter/filter.js b/test/staging/sm/AsyncIterator/prototype/filter/filter.js deleted file mode 100644 index 6204d78ddbf..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/filter/filter.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -let iter = gen().filter(x => x % 2); - -for (const v of [1, 3]) { - iter.next().then( - ({done, value}) => { - assert.sameValue(done, false); - assert.sameValue(value, v); - } - ); -} - -iter.next().then(({done}) => assert.sameValue(done, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/filter/length.js b/test/staging/sm/AsyncIterator/prototype/filter/length.js deleted file mode 100644 index 1baed8d8e0e..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/filter/length.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.filter length value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -assert.sameValue(AsyncIterator.prototype.filter.length, 1); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.filter, 'length'); -assert.sameValue(propertyDescriptor.value, 1); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/filter/name.js b/test/staging/sm/AsyncIterator/prototype/filter/name.js deleted file mode 100644 index 58f157bc340..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/filter/name.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.filter.name value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -assert.sameValue(AsyncIterator.prototype.filter.name, 'filter'); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.filter, 'name'); -assert.sameValue(propertyDescriptor.value, 'filter'); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/async-writes.js b/test/staging/sm/AsyncIterator/prototype/find/async-writes.js deleted file mode 100644 index aa9697b294b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/async-writes.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let x = {a: () => true}; - -async function* gen() { - yield x.a(); - yield x.a(); -} - -gen().find(() => {}).then( - () => assert.sameValue(true, false, 'expected error'), - err => assert.sameValue(err instanceof Error, true), -); - -x.a = () => { - throw Error(); -}; - diff --git a/test/staging/sm/AsyncIterator/prototype/find/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/find/check-fn-after-getting-iterator.js deleted file mode 100644 index 0b05d8a6d8c..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/check-fn-after-getting-iterator.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new TestIterator(), handlerProxy); -iter.find(1).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); - assert.sameValue( - log.join('\n'), - `get: find -get: next` - ); -}); - - diff --git a/test/staging/sm/AsyncIterator/prototype/find/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/find/coerce-result-to-boolean.js deleted file mode 100644 index e1da77e9fc7..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/coerce-result-to-boolean.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -features: -- IsHTMLDDA -- async-iteration -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -description: | - pending -esid: pending ----*/ - -async function* gen(value) { - yield value; -} -const fn = x => x; -function check(value, expected) { - gen(value).find(fn).then(result => assert.sameValue(result, expected)); -} - -check(true, true); -check(1, 1); -check('test', 'test'); - -check(false, undefined); -check(0, undefined); -check('', undefined); -check(null, undefined); -check(undefined, undefined); -check(NaN, undefined); -check(-0, undefined); -check(0n, undefined); -check(Promise.resolve(false), undefined); - -let array = []; -check(array, array); - -let object = {}; -check(object, object); - -const htmlDDA = createIsHTMLDDA(); -check(htmlDDA, undefined); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/descriptor.js b/test/staging/sm/AsyncIterator/prototype/find/descriptor.js deleted file mode 100644 index 04ca7b91504..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/descriptor.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - Descriptor property of AsyncIterator.prototype.find -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'find'); -assert.sameValue(typeof propDesc.value, 'function'); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/find/error-from-correct-realm.js deleted file mode 100644 index 0c1f3dfb695..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/error-from-correct-realm.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const otherGlobal = createNewGlobal({newCompartment: true}); -assert.sameValue(TypeError !== otherGlobal.TypeError, true); - -async function *gen() {} - -gen().find().then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); -}); - -otherGlobal.AsyncIterator.prototype.find.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue( - err instanceof otherGlobal.TypeError, - true, - 'TypeError comes from the realm of the method.', - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/find/fn-not-callable-throws.js deleted file mode 100644 index b345e4a825b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/fn-not-callable-throws.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function *gen() { - yield 1; -} - -function check(fn) { - gen().every(fn).then(() => { - throw new Error('every should have thrown'); - }, - (err) => { - assert.sameValue(err instanceof TypeError, true); - }); -} - -check(); -check(undefined); -check(null); -check(0); -check(false); -check(''); -check(Symbol('')); -check({}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/find/fn-throws-close-iterator.js deleted file mode 100644 index c2e11415951..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/fn-throws-close-iterator.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({done: this.closed}); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => { throw new Error(); }; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.find(fn).then(() => { - throw new Error('promise should be rejected'); -}, err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/find/interleaving-calls.js deleted file mode 100644 index 66e424a42ca..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/interleaving-calls.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const log = []; -async function* gen(n) { - log.push(`${n}`); - yield 1; - log.push(`${n}`); - yield 2; -} - -Promise.all([gen(1).find(() => {}), gen(2).find(() => {})]).then( - () => { - assert.sameValue( - log.join(' '), - '1 2 1 2', - ); - }, - err => { - throw err; - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/length.js b/test/staging/sm/AsyncIterator/prototype/find/length.js deleted file mode 100644 index 6b68ff0f5c8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - The `length` property of AsyncIterator.prototype.find. -info: | - ES7 section 17: Unless otherwise specified, the length property of a built-in - Function object has the attributes { [[Writable]]: false, [[Enumerable]]: - false, [[Configurable]]: true }. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.find, 'length'); -assert.sameValue(propDesc.value, 1); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/name.js b/test/staging/sm/AsyncIterator/prototype/find/name.js deleted file mode 100644 index 4b53e2550fe..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/name.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - `name` property of AsyncIterator.prototype.find. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.find, 'name'); -assert.sameValue(propDesc.value, 'find'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/find/next-throws-iterator-not-closed.js deleted file mode 100644 index 8ff3da47d8e..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/next-throws-iterator-not-closed.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - throw new Error(); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = x => x; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.find(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, false); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/proxy.js b/test/staging/sm/AsyncIterator/prototype/find/proxy.js deleted file mode 100644 index e319f6a0ce6..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/proxy.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -// -// This test checks that %Iterator.prototype%.find only gets the `next` method off of the -// iterator once, and never accesses the @@iterator property. -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class Counter extends AsyncIterator { - value = 0; - next() { - const value = this.value; - if (value < 2) { - this.value = value + 1; - return Promise.resolve({done: false, value}); - } - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new Counter(), handlerProxy); -iter.find(x => x % 2 == 1).then(value => { - assert.sameValue(value, 1); - - assert.sameValue( - log.join('\n'), - `get: find -get: next -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: return` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/return-undefined-if-none-match.js b/test/staging/sm/AsyncIterator/prototype/find/return-undefined-if-none-match.js deleted file mode 100644 index b8261c6cf94..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/return-undefined-if-none-match.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 3; - yield 5; -} -const fn = x => x % 2 == 0; - -gen().find(fn).then(result => assert.sameValue(result, undefined)); - -async function* empty() {} -empty().find(x => x).then(result => assert.sameValue(result, undefined)); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/short-circuit-on-match.js b/test/staging/sm/AsyncIterator/prototype/find/short-circuit-on-match.js deleted file mode 100644 index ca0930f9968..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/short-circuit-on-match.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -const log = []; -const fn = (value) => { - log.push(value.toString()); - return value % 2 == 0; -}; - -gen().find(fn).then(result => { - assert.sameValue(result, 2); - assert.sameValue(log.join(','), '1,2'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/find/this-not-iterator-throws.js deleted file mode 100644 index d5c121c1212..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/this-not-iterator-throws.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const fn = x => x; - -function check(x) { - AsyncIterator.prototype.find.call(x, fn).then( - () => assert.sameValue(true, false, 'expected error'), - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check({}); -check({next: 0}); - diff --git a/test/staging/sm/AsyncIterator/prototype/find/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/find/value-throws-iterator-not-closed.js deleted file mode 100644 index 22192e13505..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/find/value-throws-iterator-not-closed.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ - done: false, - get value() { - throw new TestError(); - } - }); - } - - closed = false; - return() { - closed = true; - } -} - -const iterator = new TestIterator(); -assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); -iterator.find(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js deleted file mode 100644 index c1b35e29d58..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap closes the iterator when innerComplete throws. -info: | - Iterator Helpers proposal 2.1.6.7 1. Repeat, - ... - k. Repeat, while innerAlive is true, - ... - v. Let innerComplete be IteratorComplete(innerNext). - vi. IfAbruptCloseAsyncIterator(innerComplete, iterated). -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 0}; - } - - closed = false; - async return() { - this.closed = true; - return {done: true}; - } -} - -class TestError extends Error {} -class InnerIterator extends AsyncIterator { - async next() { - return { - get done() { - throw new TestError(); - } - }; - } -} - -const iter = new TestIterator(); -const mapped = iter.flatMap(x => new InnerIterator()); - -assert.sameValue(iter.closed, false); -mapped.next().then( - _ => assert.sameValue(true, false, 'Expected reject.'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iter.closed, true); - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-next-throws.js b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-next-throws.js deleted file mode 100644 index 17715ad7ece..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-next-throws.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap closes the iterator when IteratorNext throws. -info: | - Iterator Helpers proposal 2.1.6.7 1. Repeat, - ... - k. Repeat, while innerAlive is true, - i. Let innerNextPromise be IteratorNext(innerIterator). - ii. IfAbruptCloseAsyncIterator(innerNextPromise, iterated). -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 0}; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -class TestError extends Error {} -class InnerIterator extends AsyncIterator { - async next() { - throw new TestError(); - } -} - -const iter = new TestIterator(); -const mapped = iter.flatMap(x => new InnerIterator()); - -assert.sameValue(iter.closed, false); -mapped.next().then( - _ => assert.sameValue(true, false, 'Expected reject.'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iter.closed, true); - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-value-throws.js b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-value-throws.js deleted file mode 100644 index 23350f02b6b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-value-throws.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap closes the iterator when innerValue throws. -info: | - Iterator Helpers proposal 2.1.6.7 1. Repeat, - ... - k. Repeat, while innerAlive is true, - ... - viii. Else, - 1. Let innerValue be IteratorValue(innerNext). - 2. IfAbruptCloseAsyncIterator(innerValue, iterated). -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 0}; - } - - closed = false; - async return() { - this.closed = true; - return {done: true}; - } -} - -class TestError extends Error {} -class InnerIterator extends AsyncIterator { - async next() { - return { - done: false, - get value() { - throw new TestError(); - }, - }; - } -} - -const iter = new TestIterator(); -const mapped = iter.flatMap(x => new InnerIterator()); - -assert.sameValue(iter.closed, false); -mapped.next().then( - _ => assert.sameValue(true, false, 'Expected reject.'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iter.closed, true); - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/flatMap.js b/test/staging/sm/AsyncIterator/prototype/flatMap/flatMap.js deleted file mode 100644 index eb49761d20e..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/flatMap.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -async function* inner(x) { - yield x; - yield x + 1; -} - -let iter = gen().flatMap(x => inner(x)); - -for (const v of [1, 2, 2, 3, 3, 4]) { - iter.next().then( - ({done, value}) => { - assert.sameValue(done, false); - assert.sameValue(value, v); - } - ); -} - -iter.next().then(({done}) => assert.sameValue(done, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/inner-empty-iterable.js b/test/staging/sm/AsyncIterator/prototype/flatMap/inner-empty-iterable.js deleted file mode 100644 index 996abcf3401..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/inner-empty-iterable.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap skips empty inner iterables. -info: | - Iterator Helpers proposal 2.1.6.7 1. Repeat, - ... - k. Repeat, while innerAlive is true, - ... - v. Let innerComplete be IteratorComplete(innerNext). - ... - vii. If innerComplete is true, set innerAlive to false. -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen(values) { - yield* values; -} - -(async () => { - let iter = gen([0, 1, 2, 3]).flatMap(x => x % 2 ? gen([]) : gen([x])); - - for (const expected of [0, 2]) { - const result = await iter.next(); - assert.sameValue(result.value, expected); - assert.sameValue(result.done, false); - } - - let result = await iter.next(); - assert.sameValue(result.value, undefined); - assert.sameValue(result.done, true); - - iter = gen([0, 1, 2, 3]).flatMap(x => gen([])); - result = await iter.next(); - assert.sameValue(result.value, undefined); - assert.sameValue(result.done, true); -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/inner-generator.js b/test/staging/sm/AsyncIterator/prototype/flatMap/inner-generator.js deleted file mode 100644 index dcf18cffb2a..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/inner-generator.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap innerIterator can be a generator. -info: | - Iterator Helpers proposal 2.1.6.7 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen() { - yield 1; - yield 2; -} - -(async () => { - const iter = gen().flatMap(async function*(x) { - yield x; - yield* [x + 1, x + 2]; - }); - - for (const expected of [1, 2, 3, 2, 3, 4]) { - const result = await iter.next(); - assert.sameValue(result.value, expected); - assert.sameValue(result.done, false); - } - - const result = await iter.next(); - assert.sameValue(result.value, undefined); - assert.sameValue(result.done, true); -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/length.js b/test/staging/sm/AsyncIterator/prototype/flatMap/length.js deleted file mode 100644 index 403d207ddbc..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/length.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap length value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -assert.sameValue(AsyncIterator.prototype.flatMap.length, 1); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.flatMap, 'length'); -assert.sameValue(propertyDescriptor.value, 1); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/name.js b/test/staging/sm/AsyncIterator/prototype/flatMap/name.js deleted file mode 100644 index f6ede692fbd..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/name.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap.name value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -assert.sameValue(AsyncIterator.prototype.flatMap.name, 'flatMap'); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.flatMap, 'name'); -assert.sameValue(propertyDescriptor.value, 'flatMap'); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/throw-when-inner-not-iterable.js b/test/staging/sm/AsyncIterator/prototype/flatMap/throw-when-inner-not-iterable.js deleted file mode 100644 index 176ef608f07..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/flatMap/throw-when-inner-not-iterable.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.flatMap closes the iterator and throws when mapped isn't iterable. -info: | - Iterator Helpers proposal 2.1.6.7 1. Repeat, - ... - h. Let innerIterator be GetIterator(mapped, async). - i. IfAbruptCloseAsyncIterator(innerIterator, iterated). -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class NotIterable { - async next() { - return {done: true}; - } -} - -class InvalidIterable { - [Symbol.asyncIterator]() { - return {}; - } -} - -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 0}; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -const nonIterables = [ - new NotIterable(), - new InvalidIterable(), - undefined, - null, - 0, - false, - Symbol(''), - 0n, - {}, -]; - -(async () => { - for (const value of nonIterables) { - const iter = new TestIterator(); - const mapped = iter.flatMap(x => value); - - assert.sameValue(iter.closed, false); - try { - await mapped.next(); - assert.sameValue(true, false, 'Expected reject'); - } catch (exc) { - assert.sameValue(exc instanceof TypeError, true); - } - assert.sameValue(iter.closed, true); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/async-writes.js b/test/staging/sm/AsyncIterator/prototype/forEach/async-writes.js deleted file mode 100644 index 999e0230eca..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/async-writes.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let x = {a: () => true}; - -async function* gen() { - yield x.a(); - yield x.a(); -} - -gen().forEach(() => {}).then( - () => assert.sameValue(true, false, 'expected error'), - err => assert.sameValue(err instanceof Error, true), -); - -x.a = () => { - throw Error(); -}; - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/forEach/check-fn-after-getting-iterator.js deleted file mode 100644 index ec284bd4978..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/check-fn-after-getting-iterator.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new TestIterator(), handlerProxy); -iter.forEach(1).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); - assert.sameValue( - log.join('\n'), - `get: forEach -get: next` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/descriptor.js b/test/staging/sm/AsyncIterator/prototype/forEach/descriptor.js deleted file mode 100644 index 3a1f9cd3968..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/descriptor.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - Descriptor property of AsyncIterator.prototype.forEach -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'forEach'); -assert.sameValue(typeof propDesc.value, 'function'); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/forEach/error-from-correct-realm.js deleted file mode 100644 index 1f3d20463a9..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/error-from-correct-realm.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const otherGlobal = createNewGlobal({newCompartment: true}); -assert.sameValue(TypeError !== otherGlobal.TypeError, true); - -async function *gen() {} - -gen().forEach().then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); -}); - -otherGlobal.AsyncIterator.prototype.forEach.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue( - err instanceof otherGlobal.TypeError, - true, - 'TypeError comes from the realm of the method.', - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/forEach/fn-not-callable-throws.js deleted file mode 100644 index 72ac8dc085a..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/fn-not-callable-throws.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function *gen() {} - -function check(fn) { - gen().forEach(fn).then(() => { - throw new Error('every should have thrown'); - }, - (err) => { - assert.sameValue(err instanceof TypeError, true); - }); -} - -check(); -check(undefined); -check(null); -check(0); -check(false); -check(''); -check(Symbol('')); -check({}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/forEach/fn-throws-close-iterator.js deleted file mode 100644 index 6513c5611ec..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/fn-throws-close-iterator.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ done: this.closed }); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => { throw new Error(); }; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.forEach(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/forEach/interleaving-calls.js deleted file mode 100644 index dfb7f82f1df..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/interleaving-calls.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const log = []; -async function* gen(n) { - log.push(`${n}`); - yield 1; - log.push(`${n}`); - yield 2; -} - -Promise.all([gen(1).forEach(() => {}), gen(2).forEach(() => {})]).then( - () => { - assert.sameValue( - log.join(' '), - '1 2 1 2', - ); - }, - err => { - throw err; - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/length.js b/test/staging/sm/AsyncIterator/prototype/forEach/length.js deleted file mode 100644 index f20087e6e3f..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - The `length` property of AsyncIterator.prototype.forEach. -info: | - ES7 section 17: Unless otherwise specified, the length property of a built-in - Function object has the attributes { [[Writable]]: false, [[Enumerable]]: - false, [[Configurable]]: true }. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.forEach, 'length'); -assert.sameValue(propDesc.value, 1); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/name.js b/test/staging/sm/AsyncIterator/prototype/forEach/name.js deleted file mode 100644 index f385222bfdb..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/name.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - `name` property of AsyncIterator.prototype.forEach. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.forEach, 'name'); -assert.sameValue(propDesc.value, 'forEach'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/forEach/next-throws-iterator-not-closed.js deleted file mode 100644 index eb4a9efed73..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/next-throws-iterator-not-closed.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - throw new Error(); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => {}; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.forEach(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, false); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/proxy.js b/test/staging/sm/AsyncIterator/prototype/forEach/proxy.js deleted file mode 100644 index cd6d04b7a03..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/proxy.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -// -// This test checks that %Iterator.prototype%.forEach only gets the `next` method off of the -// iterator once, and never accesses the @@iterator property. -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class Counter extends AsyncIterator { - value = 0; - next() { - const value = this.value; - if (value < 2) { - this.value = value + 1; - return Promise.resolve({done: false, value}); - } - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new Counter(), handlerProxy); -iter.forEach(x => x).then(() => { - assert.sameValue( - log.join('\n'), - `get: forEach -get: next -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/forEach/this-not-iterator-throws.js deleted file mode 100644 index 88737dcd316..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/this-not-iterator-throws.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const fn = x => x; -function check(x) { - AsyncIterator.prototype.forEach.call(x, fn).then( - () => assert.sameValue(true, false, 'expected error'), - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check({}); -check({next: 0}); - diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/forEach/value-throws-iterator-not-closed.js deleted file mode 100644 index de1535e38c4..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/forEach/value-throws-iterator-not-closed.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ - done: false, - get value() { - throw new TestError(); - } - }); - } - - closed = false; - return() { - closed = true; - } -} - -const iterator = new TestIterator(); -assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); -iterator.forEach(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/generator-methods-throw-on-iterator-helpers.js b/test/staging/sm/AsyncIterator/prototype/generator-methods-throw-on-iterator-helpers.js deleted file mode 100644 index ce941e90871..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/generator-methods-throw-on-iterator-helpers.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const asyncGeneratorProto = Object.getPrototypeOf( - Object.getPrototypeOf( - (async function *() {})() - ) -); - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(x => (async function*() {})()), -]; - -for (const method of methods) { - const iteratorHelper = method((async function*() {})()); - asyncGeneratorProto.next.call(iteratorHelper).then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => assert.sameValue(err instanceof TypeError, true), - ); - asyncGeneratorProto.return.call(iteratorHelper).then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => assert.sameValue(err instanceof TypeError, true), - ); - asyncGeneratorProto.throw.call(iteratorHelper).then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => assert.sameValue(err instanceof TypeError, true), - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/iterator-helper-methods-throw-on-generators.js b/test/staging/sm/AsyncIterator/prototype/iterator-helper-methods-throw-on-generators.js deleted file mode 100644 index 5eb4f3609f0..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/iterator-helper-methods-throw-on-generators.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function *gen() { yield 'value'; } - -const asyncIteratorHelperProto = Object.getPrototypeOf(gen().map(x => x)); - -assertThrowsInstanceOf(() => asyncIteratorHelperProto.next.call(gen()), TypeError); -assertThrowsInstanceOf(() => asyncIteratorHelperProto.return.call(gen()), TypeError); -assertThrowsInstanceOf(() => asyncIteratorHelperProto.throw.call(gen()), TypeError); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-from-other-global.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-from-other-global.js deleted file mode 100644 index 7ce488d05e7..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-from-other-global.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen(values) { - yield* values; -} - -const otherAsyncIteratorProto = createNewGlobal({newCompartment: true}).AsyncIterator.prototype; - -const methods = [ - ["map", x => x], - ["filter", x => true], - ["take", Infinity], - ["drop", 0], - ["asIndexedPairs", undefined], - ["flatMap", x => gen([x])], -]; - -(async () => { - for (const [method, arg] of methods) { - const iterator = gen([1, 2, 3]); - const helper = otherAsyncIteratorProto[method].call(iterator, arg); - - for (const expected of [1, 2, 3]) { - const {done, value} = await helper.next(); - assert.sameValue(done, false); - assert.sameValue(Array.isArray(value) ? value[1] : value, expected); - } - - const {done, value} = await helper.next(); - assert.sameValue(done, true); - assert.sameValue(value, undefined); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-handle-empty-iterators.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-handle-empty-iterators.js deleted file mode 100644 index c56a705122c..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-handle-empty-iterators.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods handle empty iterators. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class EmptyIterator extends AsyncIterator { - async next() { - return {done: true}; - } -} - -async function* gen() {} - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(x => gen()), -]; - -for (const method of methods) { - for (const iterator of [new EmptyIterator(), gen()]) { - method(iterator).next().then( - ({done, value}) => { - assert.sameValue(done, true); - assert.sameValue(value, undefined); - } - ); - } -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-interleaved.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-interleaved.js deleted file mode 100644 index 86bd6de9dfb..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-interleaved.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% method calls can be interleaved. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - value = 0; - async next() { - return {done: false, value: this.value++}; - } -} - -function unwrapResult(value) { - // Unwrap the asIndexedPair return values. - while (Array.isArray(value)) { - value = value[1]; - } - return value; -} - -function check({done, value}, expectedDone, expectedValue) { - assert.sameValue(done, expectedDone); - assert.sameValue(unwrapResult(value), expectedValue); -} - -const methods = [ - ['map', x => x], - ['filter', x => true], - ['take', Infinity], - ['drop', 0], - ['asIndexedPairs', undefined], - ['flatMap', async function*(x) { yield x; }], -]; - -(async () => { - for (const [firstMethod, firstArg] of methods) { - for (const [secondMethod, secondArg] of methods) { - const iterator = new TestIterator(); - - const firstHelper = iterator[firstMethod](firstArg); - const secondHelper = iterator[secondMethod](secondArg); - - check(await firstHelper.next(), false, 0); - check(await secondHelper.next(), false, 1); - check(await firstHelper.next(), false, 2); - check(await secondHelper.next(), false, 3); - } - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-call-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-call-throws.js deleted file mode 100644 index 8a2191ce280..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-call-throws.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods close the iterator if callback throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestAsyncIterator extends AsyncIterator { - async next() { - return {done: false, value: 1}; - } - - closed = false; - async return() { - this.closed = true; - return {done: true}; - } -} - -function fn() { - throw new TestError(); -} -const methods = [ - iter => iter.map(fn), - iter => iter.filter(fn), - iter => iter.flatMap(fn), -]; - -for (const method of methods) { - const iter = new TestAsyncIterator(); - assert.sameValue(iter.closed, false); - method(iter).next().then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iter.closed, true); - }, - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js deleted file mode 100644 index dee1898a3aa..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods close the iterator if `yield` throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestAsyncIterator extends AsyncIterator { - async next() { - return {done: false, value: 1}; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => true), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - const iterator = new TestAsyncIterator(); - const iteratorHelper = method(iterator); - - assert.sameValue(iterator.closed, false); - iteratorHelper.next().then( - _ => iteratorHelper.throw(new TestError()).then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, true); - }, - ), - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-get-then-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-get-then-throws.js deleted file mode 100644 index ca74aa42c81..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-get-then-throws.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if getting `then` throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} - -class TestIterator extends AsyncIterator { - next() { - return { - get then() { - throw new TestError(); - } - }; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -const methods = [ - ["map", x => x], - ["filter", x => true], - ["take", Infinity], - ["drop", 0], - ["asIndexedPairs", undefined], - ["flatMap", async function*(x) { yield x; }], -]; - -(async () => { - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - assert.sameValue(iterator.closed, false); - - try { - await iterator[method](arg).next(); - assert.sameValue(true, false, 'Expected exception'); - } catch(err) { - assert.sameValue(err instanceof TestError, true); - } - assert.sameValue(iterator.closed, false); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-promise-executor-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-promise-executor-throws.js deleted file mode 100644 index 96202825a0f..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-promise-executor-throws.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if executor of Promise returned by `.next` throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return new Promise((resolve, reject) => { - throw new TestError(); - }); - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -const methods = [ - ["map", x => x], - ["filter", x => true], - ["take", Infinity], - ["drop", 0], - ["asIndexedPairs", undefined], - ["flatMap", async function*(x) { yield x; }], -]; - -(async () => { - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - assert.sameValue(iterator.closed, false); - - try { - await iterator[method](arg).next(); - assert.sameValue(true, false, 'Expected exception'); - } catch(err) { - assert.sameValue(err instanceof TestError, true); - } - assert.sameValue(iterator.closed, false); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-returns-reject.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-returns-reject.js deleted file mode 100644 index dd049890d01..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-returns-reject.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if `.next` returns a rejected Promise. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.reject(new TestError()); - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -const methods = [ - ["map", x => x], - ["filter", x => true], - ["take", Infinity], - ["drop", 0], - ["asIndexedPairs", undefined], - ["flatMap", async function*(x) { yield x; }], -]; - -(async () => { - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - assert.sameValue(iterator.closed, false); - - try { - await iterator[method](arg).next(); - assert.sameValue(true, false, 'Expected exception'); - } catch(err) { - assert.sameValue(err instanceof TestError, true); - } - assert.sameValue(iterator.closed, false); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-then-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-then-throws.js deleted file mode 100644 index 1e76f2e9fa8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-then-throws.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if `then` returned by `next` throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} - -class TestIterator extends AsyncIterator { - next() { - return { - then() { - throw new TestError(); - } - }; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -const methods = [ - ["map", x => x], - ["filter", x => true], - ["take", Infinity], - ["drop", 0], - ["asIndexedPairs", undefined], - ["flatMap", async function*(x) { yield x; }], -]; - -(async () => { - for (const [method, arg] of methods) { - const iterator = new TestIterator(); - assert.sameValue(iterator.closed, false); - - try { - await iterator[method](arg).next(); - assert.sameValue(true, false, 'Expected exception'); - } catch(err) { - assert.sameValue(err instanceof TestError, true); - } - assert.sameValue(iterator.closed, false); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js deleted file mode 100644 index 80ba2ec3b23..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if `.next` call throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestAsyncIterator extends AsyncIterator { - next() { - throw new TestError(); - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - const iterator = new TestAsyncIterator(); - assert.sameValue(iterator.closed, false); - method(iterator).next().then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false); - }, - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js deleted file mode 100644 index dda8ce24627..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if `value` throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestAsyncIterator extends AsyncIterator { - async next() { - return { - get value() { - throw new TestError(); - } - }; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -const iterator = new TestAsyncIterator(); - -async function* gen(x) { yield x; } -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - assert.sameValue(iterator.closed, false); - method(iterator).next().then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false); - }, - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js deleted file mode 100644 index 4c8dd94344b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - async next() { - return {done: true, value: 'value'}; - } -} - -async function* gen(x) { yield x; } - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => true), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -(async () => { - for (const method of methods) { - const iterator = method(new TestIterator()); - const {done, value} = await iterator.next(); - assert.sameValue(done, true); - assert.sameValue(value, undefined); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-return-close-iterator-once.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-return-close-iterator-once.js deleted file mode 100644 index 00e9cc90e89..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-return-close-iterator-once.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Calling `.return()` on a lazy %AsyncIterator.prototype% method multiple times closes the source iterator once. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 1}; - } - - closeCount = 0; - async return(value) { - this.closeCount++; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -(async () => { - // Call `return` after stepping the iterator once: - for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - await iterHelper.next(); - assert.sameValue(iter.closeCount, 0); - await iterHelper.return(); - assert.sameValue(iter.closeCount, 1); - await iterHelper.return(); - assert.sameValue(iter.closeCount, 1); - } - - // Call `return` before stepping the iterator: - for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - assert.sameValue(iter.closeCount, 0); - await iterHelper.return(); - assert.sameValue(iter.closeCount, 1); - await iterHelper.return(); - assert.sameValue(iter.closeCount, 1); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-throw-close-iterator-once.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-throw-close-iterator-once.js deleted file mode 100644 index 9ef7044291f..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-throw-close-iterator-once.js +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Calling `throw` on a lazy %AsyncIterator.prototype% method multiple times closes the source iterator once. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} - -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 1}; - } - - closeCount = 0; - async return(value) { - this.closeCount++; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => true), - iter => iter.take(Infinity), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -(async () => { - // Call `throw` after stepping the iterator once: - for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - await iterHelper.next() - assert.sameValue(iter.closeCount, 0); - - try { - await iterHelper.throw(new TestError()); - assert.sameValue(true, false, 'Expected reject'); - } catch (exc) { - assert.sameValue(exc instanceof TestError, true); - } - assert.sameValue(iter.closeCount, 1); - - try { - await iterHelper.throw(new TestError()); - assert.sameValue(true, false, 'Expected reject'); - } catch (exc) { - assert.sameValue(exc instanceof TestError, true); - } - assert.sameValue(iter.closeCount, 1); - } - - // Call `throw` before stepping the iterator: - for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - assert.sameValue(iter.closeCount, 0); - - try { - await iterHelper.throw(new TestError()); - assert.sameValue(true, false, 'Expected reject'); - } catch (exc) { - assert.sameValue(exc instanceof TestError, true); - } - assert.sameValue(iter.closeCount, 1); - - try { - await iterHelper.throw(new TestError()); - assert.sameValue(true, false, 'Expected reject'); - } catch (exc) { - assert.sameValue(exc instanceof TestError, true); - } - assert.sameValue(iter.closeCount, 1); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator-after-done.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator-after-done.js deleted file mode 100644 index 17dde50fc8b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator-after-done.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype% methods ignore iterator mutation if already done. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// -// - -class TestIterator extends AsyncIterator { - values = [1, 2]; - async next() { - if (this.values.length == 0) - return {done: true}; - return {done: false, value: this.values.shift()}; - } -} - -function check({done, value}, expectedDone, expectedValue) { - assert.sameValue(done, expectedDone); - assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); -} - -const methods = [ - ['map', x => x], - ['filter', x => true], - ['take', Infinity], - ['drop', 0], - ['asIndexedPairs', undefined], - ['flatMap', async function*(x) { yield x; }], -]; - -for (const [method, arg] of methods) { - (async () => { - const iter = new TestIterator(); - const iterHelper = iter[method](arg); - check(await iterHelper.next(), false, 1); - check(await iterHelper.next(), false, 2); - check(await iterHelper.next(), true, undefined); - iter.values.push(3); - check(await iterHelper.next(), true, undefined); - })(); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator.js deleted file mode 100644 index 1799f31abf7..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype% methods work properly if the iterator has been mutated. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// -// - -class TestIterator extends AsyncIterator { - values = [1, 2]; - async next() { - if (this.values.length == 0) - return {done: true}; - return {done: false, value: this.values.shift()}; - } -} - -function check({done, value}, expectedDone, expectedValue) { - assert.sameValue(done, expectedDone); - assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); -} - -const methods = [ - ['map', x => x], - ['filter', x => true], - ['take', Infinity], - ['drop', 0], - ['asIndexedPairs', undefined], - ['flatMap', async function*(x) { yield x; }], -]; - -for (const [method, arg] of methods) { - (async () => { - const iter = new TestIterator(); - const iterHelper = iter[method](arg); - check(await iterHelper.next(), false, 1); - check(await iterHelper.next(), false, 2); - iter.values.push(3); - check(await iterHelper.next(), false, 3); - check(await iterHelper.next(), true, undefined); - })(); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-not-close-iterator-next-reject.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-not-close-iterator-next-reject.js deleted file mode 100644 index 35bf90f57a1..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-not-close-iterator-next-reject.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods don't close the iterator if `next` returns rejected promise. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - next() { - return Promise.reject('rejection'); - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - const iterator = new TestIterator(); - assert.sameValue(iterator.closed, false); - method(iterator).next().then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err, 'rejection'); - assert.sameValue(iterator.closed, false); - }, - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-through-lastValue.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-through-lastValue.js deleted file mode 100644 index e43b0256337..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-through-lastValue.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestAsyncIterator extends AsyncIterator { - async next(value) { - return {done: false, value}; - } -} - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => true), - iter => iter.take(2), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), -]; - -for (const method of methods) { - const iterator = new TestAsyncIterator(); - const iteratorHelper = method(iterator); - iteratorHelper.next().then( - _ => iteratorHelper.next('last value').then( - ({done, value}) => { - assert.sameValue(done, false); - // Unwrap the return value from asIndexedPairs. - assert.sameValue(Array.isArray(value) ? value[1] : value, 'last value'); - } - ), - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-value-through-chain.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-value-through-chain.js deleted file mode 100644 index 834e0554f10..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-value-through-chain.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestAsyncIterator extends AsyncIterator { - async next(value) { - return {done: false, value}; - } -} - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => true), - iter => iter.take(2), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), -]; - -for (const outerMethod of methods) { - for (const innerMethod of methods) { - const iterator = new TestAsyncIterator(); - const iteratorChain = outerMethod(innerMethod(iterator)); - iteratorChain.next().then( - _ => iteratorChain.next('last value').then( - ({done, value}) => { - assert.sameValue(done, false); - // Unwrap the asIndexedPair return values. - while (Array.isArray(value)) { - value = value[1]; - } - assert.sameValue(value, 'last value'); - } - ), - ); - } -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-proxy-accesses.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-proxy-accesses.js deleted file mode 100644 index 9e2cf5bea9c..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-proxy-accesses.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods access specified properties only. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -let log; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); - return Reflect[key](...args); - }, -}); - -class TestIterator extends AsyncIterator { - value = 0; - async next() { - if (this.value < 1) - return new Proxy({done: false, value: this.value++}, handlerProxy); - return new Proxy({done: true, value: undefined}, handlerProxy); - } -} - -const methods = [ - ['map', x => x], - ['filter', x => true], - ['take', 4], - ['drop', 0], - ['asIndexedPairs', undefined], - ['flatMap', async function*(x) { yield x; }], -]; - -(async () => { - for (const [method, argument] of methods) { - log = []; - const iteratorProxy = new Proxy(new TestIterator(), handlerProxy); - const iteratorHelper = iteratorProxy[method](argument); - - await iteratorHelper.next(); - await iteratorHelper.next(); - const {done} = await iteratorHelper.next(); - assert.sameValue(done, true); - assert.sameValue( - log.join('\n'), - `get: ${method} -get: next -get: value -get: value -set: value,1 -getOwnPropertyDescriptor: value -defineProperty: value -get: then -get: done -get: value -get: value -get: then -get: done` - ); - } -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-closes-iterator.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-closes-iterator.js deleted file mode 100644 index 879df287b97..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-closes-iterator.js +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Calling `return` on a lazy %AsyncIterator.prototype% method closes the source iterator. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 1}; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - iterHelper.next().then(() => { - assert.sameValue(iter.closed, false); - iterHelper.return(0).then(({done, value}) => { - assert.sameValue(iter.closed, true); - assert.sameValue(done, true); - assert.sameValue(value, 0); - }); - }); -} - -for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - assert.sameValue(iter.closed, false); - iterHelper.return(0).then(({done, value}) => { - assert.sameValue(iter.closed, true); - assert.sameValue(done, true); - assert.sameValue(value, 0); - }); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-new-iterator-result.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-new-iterator-result.js deleted file mode 100644 index c97e03d32c2..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-new-iterator-result.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy Iterator Helper methods return new iterator result objects. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -const iterResult = {done: false, value: 1, testProperty: 'test'}; -class TestIterator extends AsyncIterator { - async next() { - return iterResult; - } -} - -async function* gen(x) { yield x; } - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => true), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -// Call `return` before stepping the iterator: -for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - iterHelper.next().then(result => { - assert.sameValue(result == iterResult, false); - assert.sameValue(result.testProperty, undefined); - }); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-closes-iterator-before-next.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-closes-iterator-before-next.js deleted file mode 100644 index d94e844bab3..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-closes-iterator-before-next.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Calling `throw` on a lazy %AsyncIterator.prototype% method closes the source iterator. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} - -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 1}; - } - - closed = false; - async return(value) { - this.closed = true; - return {done: true, value}; - } -} - -async function* gen(x) { yield x; } - -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - const iter = new TestIterator(); - const iterHelper = method(iter); - - assert.sameValue(iter.closed, false); - iterHelper.throw(new TestError()).then( - _ => assert.sameValue(true, false, 'Expected reject.'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iter.closed, true); - - iterHelper.next().then(({done, value}) => { - assert.sameValue(done, true); - assert.sameValue(value, undefined); - }); - }, - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js deleted file mode 100644 index fd022c64a33..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods throw eagerly when `next` is non-callable. -info: | - Iterator Helpers proposal 1.1.1 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen(x) { yield x; } -const methods = [ - next => AsyncIterator.prototype.map.bind({next}, x => x), - next => AsyncIterator.prototype.filter.bind({next}, x => x), - next => AsyncIterator.prototype.take.bind({next}, 1), - next => AsyncIterator.prototype.drop.bind({next}, 0), - next => AsyncIterator.prototype.asIndexedPairs.bind({next}), - next => AsyncIterator.prototype.flatMap.bind({next}, gen), -]; - -for (const method of methods) { - assertThrowsInstanceOf(method(0), TypeError); - assertThrowsInstanceOf(method(false), TypeError); - assertThrowsInstanceOf(method(undefined), TypeError); - assertThrowsInstanceOf(method(null), TypeError); - assertThrowsInstanceOf(method(''), TypeError); - assertThrowsInstanceOf(method(Symbol('')), TypeError); - assertThrowsInstanceOf(method({}), TypeError); - assertThrowsInstanceOf(method([]), TypeError); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js deleted file mode 100644 index cf987198698..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods throw eagerly when passed non-callables. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen() {} - -const methods = [ - (iter, fn) => iter.map(fn), - (iter, fn) => iter.filter(fn), - (iter, fn) => iter.flatMap(fn), -]; - -for (const method of methods) { - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, 0), TypeError); - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, false), TypeError); - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, undefined), TypeError); - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, null), TypeError); - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, ''), TypeError); - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, Symbol('')), TypeError); - assertThrowsInstanceOf(() => method(AsyncIterator.prototype, {}), TypeError); - - assertThrowsInstanceOf(() => method(gen(), 0), TypeError); - assertThrowsInstanceOf(() => method(gen(), false), TypeError); - assertThrowsInstanceOf(() => method(gen(), undefined), TypeError); - assertThrowsInstanceOf(() => method(gen(), null), TypeError); - assertThrowsInstanceOf(() => method(gen(), ''), TypeError); - assertThrowsInstanceOf(() => method(gen(), Symbol('')), TypeError); - assertThrowsInstanceOf(() => method(gen(), {}), TypeError); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js deleted file mode 100644 index fce8ffdadce..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods throw eagerly when called on non-iterators. -info: | - AsyncIterator Helpers proposal 1.1.1 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen(x) { yield x; } - -const methods = [ - iter => AsyncIterator.prototype.map.bind(iter, x => x), - iter => AsyncIterator.prototype.filter.bind(iter, x => x), - iter => AsyncIterator.prototype.take.bind(iter, 1), - iter => AsyncIterator.prototype.drop.bind(iter, 0), - iter => AsyncIterator.prototype.asIndexedPairs.bind(iter), - iter => AsyncIterator.prototype.flatMap.bind(iter, gen), -]; - -for (const method of methods) { - for (const value of [undefined, null, 0, false, '', Symbol(''), {}, []]) { - assertThrowsInstanceOf(method(value), TypeError); - } -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-done-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-done-throws.js deleted file mode 100644 index 1c8b00552b8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-done-throws.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods throw if `next.done` throws. -info: | - AsyncIterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestError extends Error {} -class TestAsyncIterator extends AsyncIterator { - async next() { - return { - get done() { - throw new TestError(); - } - }; - } - - closed = false; - async return() { - this.closed = true; - return {done: true}; - } -} - -async function* gen(x) { yield x; } -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - const iterator = new TestAsyncIterator(); - assert.sameValue(iterator.closed, false); - method(iterator).next().then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false); - }, - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-not-object.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-not-object.js deleted file mode 100644 index bf713c24cda..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-not-object.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Lazy %AsyncIterator.prototype% methods throw if `next` call returns a non-object. -info: | - Iterator Helpers proposal 2.1.6 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestAsyncIterator extends AsyncIterator { - async next(value) { - return value; - } - - closed = false; - async return() { - this.closed = true; - return {done: true}; - } -} - -async function* gen(x) { yield x; } -const methods = [ - iter => iter.map(x => x), - iter => iter.filter(x => x), - iter => iter.take(1), - iter => iter.drop(0), - iter => iter.asIndexedPairs(), - iter => iter.flatMap(gen), -]; - -for (const method of methods) { - for (const value of [undefined, null, 0, false, '', Symbol('')]) { - const iterator = new TestAsyncIterator(); - assert.sameValue(iterator.closed, false); - method(iterator).next(value).then( - _ => assert.sameValue(true, false, 'Expected reject'), - err => { - assert.sameValue(err instanceof TypeError, true); - assert.sameValue(iterator.closed, false); - }, - ); - } -} - diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-on-reentry.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-on-reentry.js deleted file mode 100644 index d0842087a33..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-on-reentry.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen(x) { yield x; } - -const methods = ['map', 'filter', 'flatMap']; - -for (const method of methods) { - const iter = gen('value'); - const iterHelper = iter[method](x => iterHelper.next()); - iterHelper.next().then( - _ => assert.sameValue(true, false, 'Expected reject.'), - err => assert.sameValue(err instanceof TypeError, true), - ); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/map/length.js b/test/staging/sm/AsyncIterator/prototype/map/length.js deleted file mode 100644 index 3f969a4255e..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/map/length.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.map length value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -assert.sameValue(AsyncIterator.prototype.map.length, 1); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.map, 'length'); -assert.sameValue(propertyDescriptor.value, 1); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/map/map.js b/test/staging/sm/AsyncIterator/prototype/map/map.js deleted file mode 100644 index 22e3b737f9b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/map/map.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -const iter = gen().map(x => x**2); - -for (const v of [1, 4, 9]) { - iter.next().then( - ({done, value}) => { - assert.sameValue(done, false); - assert.sameValue(value, v); - } - ); -} - -iter.next().then(({done}) => assert.sameValue(done, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/map/name.js b/test/staging/sm/AsyncIterator/prototype/map/name.js deleted file mode 100644 index 8fcdd061dfa..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/map/name.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.map.name value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -assert.sameValue(AsyncIterator.prototype.map.name, 'map'); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.map, 'name'); -assert.sameValue(propertyDescriptor.value, 'map'); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/accumulator-set-to-initial-value.js b/test/staging/sm/AsyncIterator/prototype/reduce/accumulator-set-to-initial-value.js deleted file mode 100644 index a1720924623..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/accumulator-set-to-initial-value.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const reducer = (acc, _) => acc; -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -gen().reduce(reducer, 0).then(value => assert.sameValue(value, 0)); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/async-writes.js b/test/staging/sm/AsyncIterator/prototype/reduce/async-writes.js deleted file mode 100644 index fa2bc2b2d17..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/async-writes.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let x = {a: () => true}; - -async function* gen() { - yield x.a(); - yield x.a(); -} - -gen().reduce(() => {}, 0).then( - () => assert.sameValue(true, false, 'expected error'), - err => assert.sameValue(err instanceof Error, true), -); - -x.a = () => { - throw Error(); -}; - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/reduce/check-fn-after-getting-iterator.js deleted file mode 100644 index f2f44aad9fa..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/check-fn-after-getting-iterator.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ done: this.closed }); - } -} - -const iter = new Proxy(new TestIterator(), handlerProxy); -iter.reduce(1).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); - assert.sameValue( - log.join('\n'), - `get: reduce -get: next` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/descriptor.js b/test/staging/sm/AsyncIterator/prototype/reduce/descriptor.js deleted file mode 100644 index af0d2daaf4e..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/descriptor.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - Descriptor property of AsyncIterator.prototype.reduce -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'reduce'); -assert.sameValue(typeof propDesc.value, 'function'); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/empty-iterator-without-initial-value-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/empty-iterator-without-initial-value-throws.js deleted file mode 100644 index 11b982406b9..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/empty-iterator-without-initial-value-throws.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() {} -gen().reduce((x, y) => x + y).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/reduce/error-from-correct-realm.js deleted file mode 100644 index 77d818c7414..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/error-from-correct-realm.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const otherGlobal = createNewGlobal({newCompartment: true}); -assert.sameValue(TypeError !== otherGlobal.TypeError, true); - -async function *gen() {} - -gen().reduce().then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); -}); - -otherGlobal.AsyncIterator.prototype.reduce.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue( - err instanceof otherGlobal.TypeError, - true, - 'TypeError comes from the realm of the method.', - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/reduce/interleaving-calls.js deleted file mode 100644 index 022b098c6b0..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/interleaving-calls.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const log = []; -async function* gen(n) { - log.push(`${n}`); - yield 1; - log.push(`${n}`); - yield 2; -} - -Promise.all([gen(1).reduce(() => {}, 0), gen(2).reduce(() => {}, 0)]).then( - () => { - assert.sameValue( - log.join(' '), - '1 2 1 2', - ); - }, - err => { - throw err; - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/iterator-empty-return-initial-value.js b/test/staging/sm/AsyncIterator/prototype/reduce/iterator-empty-return-initial-value.js deleted file mode 100644 index 186a36c3460..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/iterator-empty-return-initial-value.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const reducer = (x, y) => 0; -async function *gen() {} - -gen().reduce(reducer, 1).then(result => assert.sameValue(result, 1)); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/iterator-next-return-non-object-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/iterator-next-return-non-object-throws.js deleted file mode 100644 index 98485db69c0..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/iterator-next-return-non-object-throws.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - constructor(value) { - super(); - this.value = value; - } - - next() { - return Promise.resolve(this.value); - } -} - -const sum = (x, y) => x + y; -function check(value) { - const iter = new TestIterator(value); - iter.reduce(sum).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); - }); -} - -check(); -check(undefined); -check(null); -check(0); -check(false); -check(''); -check(Symbol('')); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/left-associative.js b/test/staging/sm/AsyncIterator/prototype/reduce/left-associative.js deleted file mode 100644 index e8550c21edb..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/left-associative.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -gen().reduce((x, y) => `(${x}+${y})`, 0) - .then(result => assert.sameValue(result, '(((0+1)+2)+3)')); -gen().reduce((x, y) => `(${x}+${y})`) - .then(result => assert.sameValue(result, '((1+2)+3)')); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/length.js b/test/staging/sm/AsyncIterator/prototype/reduce/length.js deleted file mode 100644 index d9bdc36cd3b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - The `length` property of AsyncIterator.prototype.reduce. -info: | - ES7 section 17: Unless otherwise specified, the length property of a built-in - Function object has the attributes { [[Writable]]: false, [[Enumerable]]: - false, [[Configurable]]: true }. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.reduce, 'length'); -assert.sameValue(propDesc.value, 1); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/name.js b/test/staging/sm/AsyncIterator/prototype/reduce/name.js deleted file mode 100644 index 66fb10efcac..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/name.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - `name` property of AsyncIterator.prototype.reduce. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.reduce, 'name'); -assert.sameValue(propDesc.value, 'reduce'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/reduce/next-throws-iterator-not-closed.js deleted file mode 100644 index e1d35cbd1dc..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/next-throws-iterator-not-closed.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - throw new Error(); - } - - closed = false; - return() { - this.closed = true; - } -} - -const sum = (x, y) => x + y; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.reduce(sum).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, false); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js b/test/staging/sm/AsyncIterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js deleted file mode 100644 index 664f9e4f3d5..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const reducer = (acc, _) => acc; -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -gen().reduce(reducer).then(result => assert.sameValue(result, 1)); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/proxy.js b/test/staging/sm/AsyncIterator/prototype/reduce/proxy.js deleted file mode 100644 index caf4f6c600a..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/proxy.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -// -// This test checks that %Iterator.prototype%.reduce only gets the `next` method off of the -// iterator once, and never accesses the @@iterator property. -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class Counter extends AsyncIterator { - value = 0; - next() { - const value = this.value; - if (value < 2) { - this.value = value + 1; - return Promise.resolve({done: false, value}); - } - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new Counter(), handlerProxy); -iter.reduce((x, y) => x + y).then(() => { - assert.sameValue( - log.join('\n'), - `get: reduce -get: next -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/reduce.js b/test/staging/sm/AsyncIterator/prototype/reduce/reduce.js deleted file mode 100644 index 05e65405d27..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/reduce.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const reducer = (acc, value) => acc + value; -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -gen().reduce(reducer, 0).then(result => assert.sameValue(result, 6)); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/reducer-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/reducer-not-callable-throws.js deleted file mode 100644 index dd0ccc88b8d..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/reducer-not-callable-throws.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function *gen() {} - -function check(fn) { - gen().reduce(fn).then(() => { - throw new Error('every should have thrown'); - }, - err => { - assert.sameValue(err instanceof TypeError, true); - }); -} - -check(); -check(undefined); -check(null); -check(0); -check(false); -check(''); -check(Symbol('')); -check({}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/reducer-throws-iterator-closed.js b/test/staging/sm/AsyncIterator/prototype/reduce/reducer-throws-iterator-closed.js deleted file mode 100644 index 1b738c1a2ea..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/reducer-throws-iterator-closed.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ done: this.closed, value: undefined }); - } - - closed = false; - return() { - this.closed = true; - } -} - -const reducer = (x, y) => { throw new Error(); }; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.reduce(reducer).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/this-not-iterator-throws.js deleted file mode 100644 index 7414f207d56..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/this-not-iterator-throws.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const sum = (x, y) => x + y; -function check(x) { - AsyncIterator.prototype.reduce.call(x, sum).then( - () => assert.sameValue(true, false, 'expected error'), - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check({}); -check({next: 0}); - diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/reduce/value-throws-iterator-not-closed.js deleted file mode 100644 index e27e6f0d905..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/reduce/value-throws-iterator-not-closed.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ - done: false, - get value() { - throw new TestError(); - } - }); - } - - closed = false; - return() { - closed = true; - } -} - -const iterator = new TestIterator(); -assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); -iterator.reduce((x, y) => x + y, 0).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/async-writes.js b/test/staging/sm/AsyncIterator/prototype/some/async-writes.js deleted file mode 100644 index 57cbad099f7..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/async-writes.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let x = {a: () => true}; - -async function* gen() { - yield x.a(); - yield x.a(); -} - -gen().some(() => {}).then( - () => assert.sameValue(true, false, 'expected error'), - err => assert.sameValue(err instanceof Error, true), -); - -x.a = () => { - throw Error(); -}; - diff --git a/test/staging/sm/AsyncIterator/prototype/some/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/some/check-fn-after-getting-iterator.js deleted file mode 100644 index bc21cef8e01..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/check-fn-after-getting-iterator.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({done: true}); - } -} - -async function* gen() { - yield 1; -} - -const iter = new Proxy(new TestIterator(), handlerProxy); -iter.some(1).then(() => assert.sameValue(true, false, 'expected error'), err => assert.sameValue(err instanceof TypeError, true)); - -assert.sameValue( - log.join('\n'), - `get: some -get: next` -); - - diff --git a/test/staging/sm/AsyncIterator/prototype/some/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/some/coerce-result-to-boolean.js deleted file mode 100644 index 1f31f13fc02..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/coerce-result-to-boolean.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -features: -- IsHTMLDDA -- async-iteration -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -description: | - pending -esid: pending ----*/ - -async function* gen(value) { - yield value; -} -const fn = x => x; -function check(value, expected) { - gen(value).some(fn).then(result => assert.sameValue(result, expected)); -} - -check(true, true); -check(1, true); -check([], true); -check({}, true); -check('test', true); - -check(false, false); -check(0, false); -check('', false); -check(null, false); -check(undefined, false); -check(NaN, false); -check(-0, false); -check(0n, false); -check(createIsHTMLDDA(), false); -check(Promise.resolve(false), false); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/descriptor.js b/test/staging/sm/AsyncIterator/prototype/some/descriptor.js deleted file mode 100644 index 69b2d5ff748..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/descriptor.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - Descriptor property of AsyncIterator.prototype.some -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'some'); -assert.sameValue(typeof propDesc.value, 'function'); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/some/error-from-correct-realm.js deleted file mode 100644 index e0e534a8182..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/error-from-correct-realm.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const otherGlobal = createNewGlobal({newCompartment: true}); -assert.sameValue(TypeError !== otherGlobal.TypeError, true); - -async function *gen() {} - -gen().some().then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TypeError, true); -}); - -otherGlobal.AsyncIterator.prototype.some.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue( - err instanceof otherGlobal.TypeError, - true, - 'TypeError comes from the realm of the method.', - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/some/fn-not-callable-throws.js deleted file mode 100644 index 7cc3edaef1b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/fn-not-callable-throws.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function *gen() { - yield 1; -} - -function check(fn) { - gen().some(fn).then( - () => { - throw new Error('every should have thrown'); - }, - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check(null); -check(0); -check(false); -check(''); -check(Symbol('')); -check({}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/some/fn-throws-close-iterator.js deleted file mode 100644 index 4d2bbb4c839..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/fn-throws-close-iterator.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ done: this.closed }); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => { throw new Error(); }; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.some(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/some/interleaving-calls.js deleted file mode 100644 index e4a45b6a00f..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/interleaving-calls.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const log = []; -async function* gen(n) { - log.push(`${n}`); - yield 1; - log.push(`${n}`); - yield 2; -} - -Promise.all([gen(1).some(() => {}), gen(2).some(() => {})]).then( - () => { - assert.sameValue( - log.join(' '), - '1 2 1 2', - ); - }, - err => { - throw err; - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/length.js b/test/staging/sm/AsyncIterator/prototype/some/length.js deleted file mode 100644 index da9ce8a5869..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - The `length` property of AsyncIterator.prototype.some. -info: | - ES7 section 17: Unless otherwise specified, the length property of a built-in - Function object has the attributes { [[Writable]]: false, [[Enumerable]]: - false, [[Configurable]]: true }. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.some, 'length'); -assert.sameValue(propDesc.value, 1); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/name.js b/test/staging/sm/AsyncIterator/prototype/some/name.js deleted file mode 100644 index 45dd02d01dc..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/name.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - `name` property of AsyncIterator.prototype.some. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.some, 'name'); -assert.sameValue(propDesc.value, 'some'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/some/next-throws-iterator-not-closed.js deleted file mode 100644 index 83e4b6679e8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/next-throws-iterator-not-closed.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - throw new Error(); - } - - closed = false; - return() { - this.closed = true; - } -} - -const fn = () => {}; -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.some(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, false); -}); diff --git a/test/staging/sm/AsyncIterator/prototype/some/proxy.js b/test/staging/sm/AsyncIterator/prototype/some/proxy.js deleted file mode 100644 index fdecbeee29e..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/proxy.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -// -// This test checks that %Iterator.prototype%.some only gets the `next` method off of the -// iterator once, and never accesses the @@iterator property. -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class Counter extends AsyncIterator { - value = 0; - next() { - const value = this.value; - if (value < 2) { - this.value = value + 1; - return Promise.resolve({done: false, value}); - } - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new Counter(), handlerProxy); -iter.some(x => x % 2 == 1).then(value => { - assert.sameValue(value, true); - - assert.sameValue( - log.join('\n'), - `get: some -get: next -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: return` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/return-false-if-none-match.js b/test/staging/sm/AsyncIterator/prototype/some/return-false-if-none-match.js deleted file mode 100644 index 64fea052082..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/return-false-if-none-match.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 3; - yield 5; -} -const fn = x => x % 2 == 0; - -gen().some(fn).then(result => assert.sameValue(result, false)); - -async function* empty() {} -empty().some(x => x).then(result => assert.sameValue(result, false)); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/short-circuit-on-true.js b/test/staging/sm/AsyncIterator/prototype/some/short-circuit-on-true.js deleted file mode 100644 index 5d5d7498b2d..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/short-circuit-on-true.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} -const log = []; -const fn = (value) => { - log.push(value.toString()); - return value % 2 == 0; -}; - -gen().some(fn).then(result => { - assert.sameValue(result, true); - assert.sameValue(log.join(','), '1,2'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/some/this-not-iterator-throws.js deleted file mode 100644 index fd30eae2be0..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/this-not-iterator-throws.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const fn = x => x; -function check(x) { - AsyncIterator.prototype.some.call(x, fn).then( - () => assert.sameValue(true, false, 'expected error'), - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check({}); -check({next: 0}); - diff --git a/test/staging/sm/AsyncIterator/prototype/some/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/some/value-throws-iterator-not-closed.js deleted file mode 100644 index 2b0bd819e7b..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/some/value-throws-iterator-not-closed.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ - done: false, - get value() { - throw new TestError(); - } - }); - } - - closed = false; - return() { - closed = true; - } -} - -const iterator = new TestIterator(); -assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); -iterator.some(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-negative.js b/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-negative.js deleted file mode 100644 index 825e9e23078..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-negative.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - `take` and `drop` throw eagerly when passed negative numbers, after rounding towards 0. -info: | - Iterator Helpers proposal 2.1.6.4 and 2.1.6.5 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen() {} -const iter = gen(); -const methods = [ - value => iter.take(value), - value => iter.drop(value), -]; - -for (const method of methods) { - assertThrowsInstanceOf(() => method(-1), RangeError); - assertThrowsInstanceOf(() => method(-Infinity), RangeError); - - // Both -0 and -0.9 round towards 0. - method(-0); - method(-0.9); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-non-integer.js b/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-non-integer.js deleted file mode 100644 index 4d333b847b3..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-non-integer.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - `take` and `drop` throw eagerly when passed values that can't be converted to numbers. -info: | - Iterator Helpers proposal 2.1.6.4 and 2.1.6.5 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen() {} -const iter = gen(); -const methods = [ - value => iter.take(value), - value => iter.drop(value), -]; - -const objectWithToPrimitive = { - [Symbol.toPrimitive]() { - return {}; - } -}; - -for (const method of methods) { - assertThrowsInstanceOf(() => method(0n), TypeError); - assertThrowsInstanceOf(() => method(Symbol('')), TypeError); - assertThrowsInstanceOf(() => method(objectWithToPrimitive), TypeError); -} - diff --git a/test/staging/sm/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js b/test/staging/sm/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js deleted file mode 100644 index 7f23118dcc4..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.take closes the iterator when remaining is 0. -info: | - Iterator Helpers proposal 2.1.6.4 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -class TestIterator extends AsyncIterator { - async next() { - return {done: false, value: 'value'}; - } - - closed = false; - async return() { - this.closed = true; - return {done: true}; - } -} - -const iter = new TestIterator(); -const iterTake = iter.take(1); - -iterTake.next().then( - ({done, value}) => { - assert.sameValue(done, false); - assert.sameValue(value, 'value'); - assert.sameValue(iter.closed, false); - - iterTake.next().then( - ({done, value}) => { - assert.sameValue(done, true); - assert.sameValue(value, undefined); - assert.sameValue(iter.closed, true); - } - ); - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/take/length.js b/test/staging/sm/AsyncIterator/prototype/take/length.js deleted file mode 100644 index 226a6f4ad75..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take/length.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.take length value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -// - -assert.sameValue(AsyncIterator.prototype.take.length, 1); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.take, 'length'); -assert.sameValue(propertyDescriptor.value, 1); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/take/name.js b/test/staging/sm/AsyncIterator/prototype/take/name.js deleted file mode 100644 index 0d28911acc2..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take/name.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.take.name value and descriptor. -info: | - 17 ECMAScript Standard Built-in Objects -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ -assert.sameValue(AsyncIterator.prototype.take.name, 'take'); - -const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.take, 'name'); -assert.sameValue(propertyDescriptor.value, 'take'); -assert.sameValue(propertyDescriptor.enumerable, false); -assert.sameValue(propertyDescriptor.writable, false); -assert.sameValue(propertyDescriptor.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/take/take-more-than-available.js b/test/staging/sm/AsyncIterator/prototype/take/take-more-than-available.js deleted file mode 100644 index b53fadcffe1..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take/take-more-than-available.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - %AsyncIterator.prototype%.take returns if the iterator is done. -info: | - Iterator Helpers proposal 2.1.6.4 2. Repeat, - ... - c. Let next be ? Await(? IteratorNext(iterated, lastValue)). - d. If ? IteratorComplete(next) is false, return undefined. -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -// -// -async function* gen(values) { - yield* values; -} - -(async () => { - const iter = gen([1, 2]).take(10); - for (const expected of [1, 2]) { - const result = await iter.next(); - assert.sameValue(result.value, expected); - assert.sameValue(result.done, false); - } - const result = await iter.next(); - assert.sameValue(result.value, undefined); - assert.sameValue(result.done, true); -})(); - diff --git a/test/staging/sm/AsyncIterator/prototype/take/take.js b/test/staging/sm/AsyncIterator/prototype/take/take.js deleted file mode 100644 index 6657f4d60aa..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/take/take.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -let iter = gen().take(2); - -for (const v of [1, 2]) { - iter.next().then( - ({done, value}) => { - assert.sameValue(done, false); - assert.sameValue(value, v); - } - ); -} - -iter.next().then(({done}) => assert.sameValue(done, true)); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/async-writes.js b/test/staging/sm/AsyncIterator/prototype/toArray/async-writes.js deleted file mode 100644 index 17c68511149..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/async-writes.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let x = {a: () => true}; - -async function* gen() { - yield x.a(); - yield x.a(); -} - -gen().toArray().then( - () => assert.sameValue(true, false, 'expected error'), - err => assert.sameValue(err instanceof Error, true), -); - -x.a = () => { - throw Error(); -}; - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/create-in-current-realm.js b/test/staging/sm/AsyncIterator/prototype/toArray/create-in-current-realm.js deleted file mode 100644 index f3adb5ed7cb..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/create-in-current-realm.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const otherGlobal = createNewGlobal({newCompartment: true}); - -async function* gen() { - yield 1; - yield 2; - yield 3; -} - -gen().toArray().then(array => { - assert.sameValue(array instanceof Array, true); - assert.sameValue(array instanceof otherGlobal.Array, false); -}); - -otherGlobal.AsyncIterator.prototype.toArray.call(gen()).then(array => { - assert.sameValue(array instanceof Array, false); - assert.sameValue(array instanceof otherGlobal.Array, true); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/descriptor.js b/test/staging/sm/AsyncIterator/prototype/toArray/descriptor.js deleted file mode 100644 index 755dd5debf4..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/descriptor.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -info: | - Descriptor property of AsyncIterator.prototype.toArray -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'toArray'); -assert.sameValue(typeof propDesc.value, 'function'); -assert.sameValue(propDesc.writable, true); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/toArray/interleaving-calls.js deleted file mode 100644 index 461f76f4149..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/interleaving-calls.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -const log = []; -async function* gen(n) { - log.push(`${n}`); - yield 1; - log.push(`${n}`); - yield 2; -} - -Promise.all([gen(1).toArray(), gen(2).toArray()]).then( - () => { - assert.sameValue( - log.join(' '), - '1 2 1 2', - ); - }, - err => { - throw err; - } -); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/iterator-empty.js b/test/staging/sm/AsyncIterator/prototype/toArray/iterator-empty.js deleted file mode 100644 index 82f511be9df..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/iterator-empty.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() {} -gen().toArray().then(array => { - assert.sameValue(Array.isArray(array), true); - assert.sameValue(array.length, 0); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/length.js b/test/staging/sm/AsyncIterator/prototype/toArray/length.js deleted file mode 100644 index 2e108f61918..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/length.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - The `length` property of AsyncIterator.prototype.toArray. -info: | - ES7 section 17: Unless otherwise specified, the length property of a built-in - Function object has the attributes { [[Writable]]: false, [[Enumerable]]: - false, [[Configurable]]: true }. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.toArray, 'length'); -assert.sameValue(propDesc.value, 0); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/name.js b/test/staging/sm/AsyncIterator/prototype/toArray/name.js deleted file mode 100644 index c4a7ddee580..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/name.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: | - `name` property of AsyncIterator.prototype.toArray. -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -esid: pending ----*/ -const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.toArray, 'name'); -assert.sameValue(propDesc.value, 'toArray'); -assert.sameValue(propDesc.writable, false); -assert.sameValue(propDesc.enumerable, false); -assert.sameValue(propDesc.configurable, true); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/next-throws.js b/test/staging/sm/AsyncIterator/prototype/toArray/next-throws.js deleted file mode 100644 index 204eaca2665..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/next-throws.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestIterator extends AsyncIterator { - next() { - throw new Error(); - } - - closed = false; - return() { - this.closed = true; - } -} - -const iter = new TestIterator(); - -assert.sameValue(iter.closed, false); -iter.toArray().then(() => assert.sameValue(true, false, 'expected error'), err => { - assert.sameValue(err instanceof Error, true); - assert.sameValue(iter.closed, false); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/proxy.js b/test/staging/sm/AsyncIterator/prototype/toArray/proxy.js deleted file mode 100644 index fdd46757dce..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/proxy.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ -// -// This test checks that %Iterator.prototype%.toArray only gets the `next` method off of the -// iterator once, and never accesses the @@iterator property. -const log = []; -const handlerProxy = new Proxy({}, { - get: (target, key, receiver) => (...args) => { - log.push(`${key}: ${args[1]?.toString()}`); - return Reflect[key](...args); - }, -}); - -class Counter extends AsyncIterator { - value = 0; - next() { - const value = this.value; - if (value < 2) { - this.value = value + 1; - return Promise.resolve({done: false, value}); - } - return Promise.resolve({done: true}); - } -} - -const iter = new Proxy(new Counter(), handlerProxy); -iter.toArray().then(() => { - assert.sameValue( - log.join('\n'), - `get: toArray -get: next -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value -set: value -getOwnPropertyDescriptor: value -defineProperty: value -get: value` - ); -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/toArray/this-not-iterator-throws.js deleted file mode 100644 index 1c44a883082..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/this-not-iterator-throws.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - - -function check(x) { - AsyncIterator.prototype.toArray.call(x).then( - () => { - throw new Error('check should have been rejected'); - }, - err => { - assert.sameValue(err instanceof TypeError, true); - } - ); -} - -check(); -check(undefined); -check({}); -check({next: 0}); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/toArray.js b/test/staging/sm/AsyncIterator/prototype/toArray/toArray.js deleted file mode 100644 index a215d8faeb8..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/toArray.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -async function* gen() { - yield 1; - yield 2; - yield 3; -} -assert.sameValue(Array.isArray(gen()), false); - -gen().toArray().then(array => { - assert.sameValue(Array.isArray(array), true); - assert.sameValue(array.length, 3); - - const expected = [1, 2, 3]; - for (const item of array) { - const expect = expected.shift(); - assert.sameValue(item, expect); - } -}); - diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/toArray/value-throws-iterator-not-closed.js deleted file mode 100644 index ca57594e4cd..00000000000 --- a/test/staging/sm/AsyncIterator/prototype/toArray/value-throws-iterator-not-closed.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -class TestError extends Error {} -class TestIterator extends AsyncIterator { - next() { - return Promise.resolve({ - done: false, - get value() { - throw new TestError(); - } - }); - } - - closed = false; - return() { - closed = true; - } -} - -const iterator = new TestIterator(); -assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); -iterator.toArray().then( - () => { - throw new Error('toArray should have thrown'); - }, - err => { - assert.sameValue(err instanceof TestError, true); - assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); - } -); - diff --git a/test/staging/sm/Error/isError.js b/test/staging/sm/Error/isError.js new file mode 100644 index 00000000000..d09ec2f7552 --- /dev/null +++ b/test/staging/sm/Error/isError.js @@ -0,0 +1,29 @@ +// Copyright (C) 2025 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- Error.isError +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Test non-object input should return false +assert.sameValue(Error.isError(null), false); +assert.sameValue(Error.isError(undefined), false); +assert.sameValue(Error.isError(123), false); +assert.sameValue(Error.isError("string"), false); + +// Test plain objects should return false +assert.sameValue(Error.isError({}), false); +assert.sameValue(Error.isError(new Object()), false); + +// Test various error objects should return true +assert.sameValue(Error.isError(new Error()), true); +assert.sameValue(Error.isError(new TypeError()), true); +assert.sameValue(Error.isError(new RangeError()), true); + diff --git a/test/staging/sm/Iterator/prototype/drop/drop.js b/test/staging/sm/Iterator/prototype/drop/drop.js deleted file mode 100644 index 9fb1e9e8067..00000000000 --- a/test/staging/sm/Iterator/prototype/drop/drop.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Smoketest of %Iterator.prototype%.drop. -info: | - Iterator Helpers proposal 2.1.5.5 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -let iter = [1, 2, 3].values().drop(1); - -for (const v of [2, 3]) { - let result = iter.next(); - assert.sameValue(result.done, false); - assert.sameValue(result.value, v); -} - -assert.sameValue(iter.next().done, true); - -// `drop`, when called without arguments, throws a RangeError, -assertThrowsInstanceOf(() => ['test'].values().drop(), RangeError); - diff --git a/test/staging/sm/Iterator/prototype/filter/filter.js b/test/staging/sm/Iterator/prototype/filter/filter.js deleted file mode 100644 index 8a9de01e1cc..00000000000 --- a/test/staging/sm/Iterator/prototype/filter/filter.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let iter = [1, 2, 3].values().filter(x => x % 2); - -for (const v of [1, 3]) { - let result = iter.next(); - assert.sameValue(result.done, false); - assert.sameValue(result.value, v); -} - -assert.sameValue(iter.next().done, true); - diff --git a/test/staging/sm/Iterator/prototype/flatMap/flatMap.js b/test/staging/sm/Iterator/prototype/flatMap/flatMap.js deleted file mode 100644 index cadad5f9670..00000000000 --- a/test/staging/sm/Iterator/prototype/flatMap/flatMap.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict -features: -- async-iteration -description: | - pending -esid: pending ----*/ - -let iter = [1, 2, 3].values().flatMap(x => [x, x + 1]); -for (const v of [1, 2, 2, 3, 3, 4]) { - let result = iter.next(); - assert.sameValue(result.done, false); - assert.sameValue(result.value, v); -} -assert.sameValue(iter.next().done, true); - diff --git a/test/staging/sm/Iterator/prototype/take/take.js b/test/staging/sm/Iterator/prototype/take/take.js deleted file mode 100644 index 6e00929d06f..00000000000 --- a/test/staging/sm/Iterator/prototype/take/take.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: pending -description: | - Smoketest of %Iterator.prototype%.take. -info: | - Iterator Helpers proposal 2.1.5.4 -features: -- async-iteration -- iterator-helpers -includes: [sm/non262-shell.js, sm/non262.js] -flags: -- noStrict ----*/ - -let iter = [1, 2, 3].values().take(2); - -for (const v of [1, 2]) { - let result = iter.next(); - assert.sameValue(result.done, false); - assert.sameValue(result.value, v); -} - -assert.sameValue(iter.next().done, true); - -// `take`, when called without arguments, throws a RangeError, -assertThrowsInstanceOf(() => ['test'].values().take(), RangeError); - diff --git a/test/staging/sm/RegExp/character-class-escape-s.js b/test/staging/sm/RegExp/character-class-escape-s.js index fe2a21bfd1c..fcc5d99fbf3 100644 --- a/test/staging/sm/RegExp/character-class-escape-s.js +++ b/test/staging/sm/RegExp/character-class-escape-s.js @@ -12,7 +12,7 @@ description: | esid: pending ---*/ /* Generated by make_unicode.py DO NOT MODIFY */ -/* Unicode version: 15.0.0 */ +/* Unicode version: 16.0.0 */ var onlySpace = String.fromCodePoint( 0x0009 /* (CHARACTER TABULATION) */, diff --git a/test/staging/sm/RegExp/unicode-ignoreCase.js b/test/staging/sm/RegExp/unicode-ignoreCase.js index f92e235a928..1206d8a089a 100644 --- a/test/staging/sm/RegExp/unicode-ignoreCase.js +++ b/test/staging/sm/RegExp/unicode-ignoreCase.js @@ -13,7 +13,7 @@ esid: pending ---*/ /* Generated by make_unicode.py DO NOT MODIFY */ -/* Unicode version: 15.0.0 */ +/* Unicode version: 16.0.0 */ var BUGNUMBER = 1135377; var summary = "Implement RegExp unicode flag -- ignoreCase flag."; @@ -292,6 +292,7 @@ test(0x0197, 0x0268); // LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTE test(0x0198, 0x0199); // LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK), LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK) test(0x0199, 0x0198); // LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK), LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK) test(0x019A, 0x023D); // LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L), LATIN CAPITAL LETTER L WITH BAR +test(0x019B, 0xA7DC); // LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA), LATIN CAPITAL LETTER LAMBDA WITH STROKE test(0x019C, 0x026F); // LATIN CAPITAL LETTER TURNED M, LATIN SMALL LETTER TURNED M test(0x019D, 0x0272); // LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK), LATIN SMALL LETTER N WITH LEFT HOOK (LATIN SMALL LETTER N HOOK) test(0x019E, 0x0220); // LATIN SMALL LETTER N WITH LONG RIGHT LEG, LATIN CAPITAL LETTER N WITH LONG RIGHT LEG @@ -468,6 +469,7 @@ test(0x025C, 0xA7AB); // LATIN SMALL LETTER REVERSED OPEN E (LATIN SMALL LETTER test(0x0260, 0x0193); // LATIN SMALL LETTER G WITH HOOK (LATIN SMALL LETTER G HOOK), LATIN CAPITAL LETTER G WITH HOOK (LATIN CAPITAL LETTER G HOOK) test(0x0261, 0xA7AC); // LATIN SMALL LETTER SCRIPT G, LATIN CAPITAL LETTER SCRIPT G test(0x0263, 0x0194); // LATIN SMALL LETTER GAMMA, LATIN CAPITAL LETTER GAMMA +test(0x0264, 0xA7CB); // LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA), LATIN CAPITAL LETTER RAMS HORN test(0x0265, 0xA78D); // LATIN SMALL LETTER TURNED H, LATIN CAPITAL LETTER TURNED H test(0x0266, 0xA7AA); // LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK), LATIN CAPITAL LETTER H WITH HOOK test(0x0268, 0x0197); // LATIN SMALL LETTER I WITH STROKE (LATIN SMALL LETTER BARRED I), LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTER BARRED I) @@ -510,6 +512,7 @@ test(0x038A, 0x03AF); // GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LET test(0x038C, 0x03CC); // GREEK CAPITAL LETTER OMICRON WITH TONOS (GREEK CAPITAL LETTER OMICRON TONOS), GREEK SMALL LETTER OMICRON WITH TONOS (GREEK SMALL LETTER OMICRON TONOS) test(0x038E, 0x03CD); // GREEK CAPITAL LETTER UPSILON WITH TONOS (GREEK CAPITAL LETTER UPSILON TONOS), GREEK SMALL LETTER UPSILON WITH TONOS (GREEK SMALL LETTER UPSILON TONOS) test(0x038F, 0x03CE); // GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS), GREEK SMALL LETTER OMEGA WITH TONOS (GREEK SMALL LETTER OMEGA TONOS) +test(0x0390, 0x1FD3); // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS), GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA test(0x0391, 0x03B1); // GREEK CAPITAL LETTER ALPHA, GREEK SMALL LETTER ALPHA test(0x0392, 0x03B2, 0x03D0); // GREEK CAPITAL LETTER BETA, GREEK SMALL LETTER BETA, GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) test(0x0393, 0x03B3); // GREEK CAPITAL LETTER GAMMA, GREEK SMALL LETTER GAMMA @@ -540,6 +543,7 @@ test(0x03AC, 0x0386); // GREEK SMALL LETTER ALPHA WITH TONOS (GREEK SMALL LETTER test(0x03AD, 0x0388); // GREEK SMALL LETTER EPSILON WITH TONOS (GREEK SMALL LETTER EPSILON TONOS), GREEK CAPITAL LETTER EPSILON WITH TONOS (GREEK CAPITAL LETTER EPSILON TONOS) test(0x03AE, 0x0389); // GREEK SMALL LETTER ETA WITH TONOS (GREEK SMALL LETTER ETA TONOS), GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS) test(0x03AF, 0x038A); // GREEK SMALL LETTER IOTA WITH TONOS (GREEK SMALL LETTER IOTA TONOS), GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LETTER IOTA TONOS) +test(0x03B0, 0x1FE3); // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS), GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA test(0x03B1, 0x0391); // GREEK SMALL LETTER ALPHA, GREEK CAPITAL LETTER ALPHA test(0x03B2, 0x0392, 0x03D0); // GREEK SMALL LETTER BETA, GREEK CAPITAL LETTER BETA, GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) test(0x03B3, 0x0393); // GREEK SMALL LETTER GAMMA, GREEK CAPITAL LETTER GAMMA @@ -1173,6 +1177,8 @@ test(0x1C85, 0x0442, 0x0422, 0x1C84); // CYRILLIC SMALL LETTER THREE-LEGGED TE, test(0x1C86, 0x044A, 0x042A); // CYRILLIC SMALL LETTER TALL HARD SIGN, CYRILLIC SMALL LETTER HARD SIGN, CYRILLIC CAPITAL LETTER HARD SIGN test(0x1C87, 0x0463, 0x0462); // CYRILLIC SMALL LETTER TALL YAT, CYRILLIC SMALL LETTER YAT, CYRILLIC CAPITAL LETTER YAT test(0x1C88, 0xA64B, 0xA64A); // CYRILLIC SMALL LETTER UNBLENDED UK, CYRILLIC SMALL LETTER MONOGRAPH UK, CYRILLIC CAPITAL LETTER MONOGRAPH UK +test(0x1C89, 0x1C8A); // CYRILLIC CAPITAL LETTER TJE, CYRILLIC SMALL LETTER TJE +test(0x1C8A, 0x1C89); // CYRILLIC SMALL LETTER TJE, CYRILLIC CAPITAL LETTER TJE test(0x1C90, 0x10D0); // GEORGIAN MTAVRULI CAPITAL LETTER AN, GEORGIAN LETTER AN (GEORGIAN SMALL LETTER AN) test(0x1C91, 0x10D1); // GEORGIAN MTAVRULI CAPITAL LETTER BAN, GEORGIAN LETTER BAN (GEORGIAN SMALL LETTER BAN) test(0x1C92, 0x10D2); // GEORGIAN MTAVRULI CAPITAL LETTER GAN, GEORGIAN LETTER GAN (GEORGIAN SMALL LETTER GAN) @@ -1645,12 +1651,14 @@ test(0x1FCB, 0x1F75); // GREEK CAPITAL LETTER ETA WITH OXIA, GREEK SMALL LETTER test(0x1FCC, 0x1FC3); // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI test(0x1FD0, 0x1FD8); // GREEK SMALL LETTER IOTA WITH VRACHY, GREEK CAPITAL LETTER IOTA WITH VRACHY test(0x1FD1, 0x1FD9); // GREEK SMALL LETTER IOTA WITH MACRON, GREEK CAPITAL LETTER IOTA WITH MACRON +test(0x1FD3, 0x0390); // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA, GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) test(0x1FD8, 0x1FD0); // GREEK CAPITAL LETTER IOTA WITH VRACHY, GREEK SMALL LETTER IOTA WITH VRACHY test(0x1FD9, 0x1FD1); // GREEK CAPITAL LETTER IOTA WITH MACRON, GREEK SMALL LETTER IOTA WITH MACRON test(0x1FDA, 0x1F76); // GREEK CAPITAL LETTER IOTA WITH VARIA, GREEK SMALL LETTER IOTA WITH VARIA test(0x1FDB, 0x1F77); // GREEK CAPITAL LETTER IOTA WITH OXIA, GREEK SMALL LETTER IOTA WITH OXIA test(0x1FE0, 0x1FE8); // GREEK SMALL LETTER UPSILON WITH VRACHY, GREEK CAPITAL LETTER UPSILON WITH VRACHY test(0x1FE1, 0x1FE9); // GREEK SMALL LETTER UPSILON WITH MACRON, GREEK CAPITAL LETTER UPSILON WITH MACRON +test(0x1FE3, 0x03B0); // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA, GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) test(0x1FE5, 0x1FEC); // GREEK SMALL LETTER RHO WITH DASIA, GREEK CAPITAL LETTER RHO WITH DASIA test(0x1FE8, 0x1FE0); // GREEK CAPITAL LETTER UPSILON WITH VRACHY, GREEK SMALL LETTER UPSILON WITH VRACHY test(0x1FE9, 0x1FE1); // GREEK CAPITAL LETTER UPSILON WITH MACRON, GREEK SMALL LETTER UPSILON WITH MACRON @@ -2244,12 +2252,18 @@ test(0xA7C7, 0xA7C8); // LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY, LATIN test(0xA7C8, 0xA7C7); // LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY, LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY test(0xA7C9, 0xA7CA); // LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY, LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY test(0xA7CA, 0xA7C9); // LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY, LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +test(0xA7CB, 0x0264); // LATIN CAPITAL LETTER RAMS HORN, LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA) +test(0xA7CC, 0xA7CD); // LATIN CAPITAL LETTER S WITH DIAGONAL STROKE, LATIN SMALL LETTER S WITH DIAGONAL STROKE +test(0xA7CD, 0xA7CC); // LATIN SMALL LETTER S WITH DIAGONAL STROKE, LATIN CAPITAL LETTER S WITH DIAGONAL STROKE test(0xA7D0, 0xA7D1); // LATIN CAPITAL LETTER CLOSED INSULAR G, LATIN SMALL LETTER CLOSED INSULAR G test(0xA7D1, 0xA7D0); // LATIN SMALL LETTER CLOSED INSULAR G, LATIN CAPITAL LETTER CLOSED INSULAR G test(0xA7D6, 0xA7D7); // LATIN CAPITAL LETTER MIDDLE SCOTS S, LATIN SMALL LETTER MIDDLE SCOTS S test(0xA7D7, 0xA7D6); // LATIN SMALL LETTER MIDDLE SCOTS S, LATIN CAPITAL LETTER MIDDLE SCOTS S test(0xA7D8, 0xA7D9); // LATIN CAPITAL LETTER SIGMOID S, LATIN SMALL LETTER SIGMOID S test(0xA7D9, 0xA7D8); // LATIN SMALL LETTER SIGMOID S, LATIN CAPITAL LETTER SIGMOID S +test(0xA7DA, 0xA7DB); // LATIN CAPITAL LETTER LAMBDA, LATIN SMALL LETTER LAMBDA +test(0xA7DB, 0xA7DA); // LATIN SMALL LETTER LAMBDA, LATIN CAPITAL LETTER LAMBDA +test(0xA7DC, 0x019B); // LATIN CAPITAL LETTER LAMBDA WITH STROKE, LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA) test(0xA7F5, 0xA7F6); // LATIN CAPITAL LETTER REVERSED HALF H, LATIN SMALL LETTER REVERSED HALF H test(0xA7F6, 0xA7F5); // LATIN SMALL LETTER REVERSED HALF H, LATIN CAPITAL LETTER REVERSED HALF H test(0xAB53, 0xA7B3); // LATIN SMALL LETTER CHI, LATIN CAPITAL LETTER CHI @@ -2333,6 +2347,8 @@ test(0xABBC, 0x13EC); // CHEROKEE SMALL LETTER WO, CHEROKEE LETTER WO test(0xABBD, 0x13ED); // CHEROKEE SMALL LETTER WU, CHEROKEE LETTER WU test(0xABBE, 0x13EE); // CHEROKEE SMALL LETTER WV, CHEROKEE LETTER WV test(0xABBF, 0x13EF); // CHEROKEE SMALL LETTER YA, CHEROKEE LETTER YA +test(0xFB05, 0xFB06); // LATIN SMALL LIGATURE LONG S T, LATIN SMALL LIGATURE ST +test(0xFB06, 0xFB05); // LATIN SMALL LIGATURE ST, LATIN SMALL LIGATURE LONG S T test(0xFF21, 0xFF41); // FULLWIDTH LATIN CAPITAL LETTER A, FULLWIDTH LATIN SMALL LETTER A test(0xFF22, 0xFF42); // FULLWIDTH LATIN CAPITAL LETTER B, FULLWIDTH LATIN SMALL LETTER B test(0xFF23, 0xFF43); // FULLWIDTH LATIN CAPITAL LETTER C, FULLWIDTH LATIN SMALL LETTER C @@ -2709,6 +2725,50 @@ test(0x10CEF, 0x10CAF); // OLD HUNGARIAN SMALL LETTER EZ, OLD HUNGARIAN CAPITAL test(0x10CF0, 0x10CB0); // OLD HUNGARIAN SMALL LETTER EZS, OLD HUNGARIAN CAPITAL LETTER EZS test(0x10CF1, 0x10CB1); // OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN, OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN test(0x10CF2, 0x10CB2); // OLD HUNGARIAN SMALL LETTER US, OLD HUNGARIAN CAPITAL LETTER US +test(0x10D50, 0x10D70); // GARAY CAPITAL LETTER A, GARAY SMALL LETTER A +test(0x10D51, 0x10D71); // GARAY CAPITAL LETTER CA, GARAY SMALL LETTER CA +test(0x10D52, 0x10D72); // GARAY CAPITAL LETTER MA, GARAY SMALL LETTER MA +test(0x10D53, 0x10D73); // GARAY CAPITAL LETTER KA, GARAY SMALL LETTER KA +test(0x10D54, 0x10D74); // GARAY CAPITAL LETTER BA, GARAY SMALL LETTER BA +test(0x10D55, 0x10D75); // GARAY CAPITAL LETTER JA, GARAY SMALL LETTER JA +test(0x10D56, 0x10D76); // GARAY CAPITAL LETTER SA, GARAY SMALL LETTER SA +test(0x10D57, 0x10D77); // GARAY CAPITAL LETTER WA, GARAY SMALL LETTER WA +test(0x10D58, 0x10D78); // GARAY CAPITAL LETTER LA, GARAY SMALL LETTER LA +test(0x10D59, 0x10D79); // GARAY CAPITAL LETTER GA, GARAY SMALL LETTER GA +test(0x10D5A, 0x10D7A); // GARAY CAPITAL LETTER DA, GARAY SMALL LETTER DA +test(0x10D5B, 0x10D7B); // GARAY CAPITAL LETTER XA, GARAY SMALL LETTER XA +test(0x10D5C, 0x10D7C); // GARAY CAPITAL LETTER YA, GARAY SMALL LETTER YA +test(0x10D5D, 0x10D7D); // GARAY CAPITAL LETTER TA, GARAY SMALL LETTER TA +test(0x10D5E, 0x10D7E); // GARAY CAPITAL LETTER RA, GARAY SMALL LETTER RA +test(0x10D5F, 0x10D7F); // GARAY CAPITAL LETTER NYA, GARAY SMALL LETTER NYA +test(0x10D60, 0x10D80); // GARAY CAPITAL LETTER FA, GARAY SMALL LETTER FA +test(0x10D61, 0x10D81); // GARAY CAPITAL LETTER NA, GARAY SMALL LETTER NA +test(0x10D62, 0x10D82); // GARAY CAPITAL LETTER PA, GARAY SMALL LETTER PA +test(0x10D63, 0x10D83); // GARAY CAPITAL LETTER HA, GARAY SMALL LETTER HA +test(0x10D64, 0x10D84); // GARAY CAPITAL LETTER OLD KA, GARAY SMALL LETTER OLD KA +test(0x10D65, 0x10D85); // GARAY CAPITAL LETTER OLD NA, GARAY SMALL LETTER OLD NA +test(0x10D70, 0x10D50); // GARAY SMALL LETTER A, GARAY CAPITAL LETTER A +test(0x10D71, 0x10D51); // GARAY SMALL LETTER CA, GARAY CAPITAL LETTER CA +test(0x10D72, 0x10D52); // GARAY SMALL LETTER MA, GARAY CAPITAL LETTER MA +test(0x10D73, 0x10D53); // GARAY SMALL LETTER KA, GARAY CAPITAL LETTER KA +test(0x10D74, 0x10D54); // GARAY SMALL LETTER BA, GARAY CAPITAL LETTER BA +test(0x10D75, 0x10D55); // GARAY SMALL LETTER JA, GARAY CAPITAL LETTER JA +test(0x10D76, 0x10D56); // GARAY SMALL LETTER SA, GARAY CAPITAL LETTER SA +test(0x10D77, 0x10D57); // GARAY SMALL LETTER WA, GARAY CAPITAL LETTER WA +test(0x10D78, 0x10D58); // GARAY SMALL LETTER LA, GARAY CAPITAL LETTER LA +test(0x10D79, 0x10D59); // GARAY SMALL LETTER GA, GARAY CAPITAL LETTER GA +test(0x10D7A, 0x10D5A); // GARAY SMALL LETTER DA, GARAY CAPITAL LETTER DA +test(0x10D7B, 0x10D5B); // GARAY SMALL LETTER XA, GARAY CAPITAL LETTER XA +test(0x10D7C, 0x10D5C); // GARAY SMALL LETTER YA, GARAY CAPITAL LETTER YA +test(0x10D7D, 0x10D5D); // GARAY SMALL LETTER TA, GARAY CAPITAL LETTER TA +test(0x10D7E, 0x10D5E); // GARAY SMALL LETTER RA, GARAY CAPITAL LETTER RA +test(0x10D7F, 0x10D5F); // GARAY SMALL LETTER NYA, GARAY CAPITAL LETTER NYA +test(0x10D80, 0x10D60); // GARAY SMALL LETTER FA, GARAY CAPITAL LETTER FA +test(0x10D81, 0x10D61); // GARAY SMALL LETTER NA, GARAY CAPITAL LETTER NA +test(0x10D82, 0x10D62); // GARAY SMALL LETTER PA, GARAY CAPITAL LETTER PA +test(0x10D83, 0x10D63); // GARAY SMALL LETTER HA, GARAY CAPITAL LETTER HA +test(0x10D84, 0x10D64); // GARAY SMALL LETTER OLD KA, GARAY CAPITAL LETTER OLD KA +test(0x10D85, 0x10D65); // GARAY SMALL LETTER OLD NA, GARAY CAPITAL LETTER OLD NA test(0x118A0, 0x118C0); // WARANG CITI CAPITAL LETTER NGAA, WARANG CITI SMALL LETTER NGAA test(0x118A1, 0x118C1); // WARANG CITI CAPITAL LETTER A, WARANG CITI SMALL LETTER A test(0x118A2, 0x118C2); // WARANG CITI CAPITAL LETTER WI, WARANG CITI SMALL LETTER WI diff --git a/test/staging/sm/String/normalize-generateddata-input.js b/test/staging/sm/String/normalize-generateddata-input.js index ad1b15e8edc..9815cb2644a 100644 --- a/test/staging/sm/String/normalize-generateddata-input.js +++ b/test/staging/sm/String/normalize-generateddata-input.js @@ -9,7 +9,7 @@ description: | pending esid: pending ---*/ -/* created from NormalizationTest-15.0.0.txt */ +/* created from NormalizationTest-16.0.0.txt */ /* Part0 # Specific cases */ var tests_part0 = [ { source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] }, @@ -36,7 +36,27 @@ var tests_part0 = [ { source: [0x05B8, 0x05B9, 0x05B1, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F] }, { source: [0x0592, 0x05B7, 0x05BC, 0x05A5, 0x05B0, 0x05C0, 0x05C4, 0x05AD], NFC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4] }, { source: [0x1100, 0xAC00, 0x11A8], NFC: [0x1100, 0xAC01], NFD: [0x1100, 0x1100, 0x1161, 0x11A8], NFKC: [0x1100, 0xAC01], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8] }, -{ source: [0x1100, 0xAC00, 0x11A8, 0x11A8], NFC: [0x1100, 0xAC01, 0x11A8], NFD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8], NFKC: [0x1100, 0xAC01, 0x11A8], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8] } +{ source: [0x1100, 0xAC00, 0x11A8, 0x11A8], NFC: [0x1100, 0xAC01, 0x11A8], NFD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8], NFKC: [0x1100, 0xAC01, 0x11A8], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8] }, +{ source: [0x01C4, 0x0323], NFC: [0x01C4, 0x0323], NFD: [0x01C4, 0x0323], NFKC: [0x0044, 0x1E92, 0x030C], NFKD: [0x0044, 0x005A, 0x0323, 0x030C] }, +{ source: [0x01C5, 0x0323], NFC: [0x01C5, 0x0323], NFD: [0x01C5, 0x0323], NFKC: [0x0044, 0x1E93, 0x030C], NFKD: [0x0044, 0x007A, 0x0323, 0x030C] }, +{ source: [0x01C6, 0x0323], NFC: [0x01C6, 0x0323], NFD: [0x01C6, 0x0323], NFKC: [0x0064, 0x1E93, 0x030C], NFKD: [0x0064, 0x007A, 0x0323, 0x030C] }, +{ source: [0x0DDD, 0x0334], NFC: [0x0DDD, 0x0334], NFD: [0x0DD9, 0x0DCF, 0x0334, 0x0DCA], NFKC: [0x0DDD, 0x0334], NFKD: [0x0DD9, 0x0DCF, 0x0334, 0x0DCA] }, +{ source: [0x3304, 0x0334], NFC: [0x3304, 0x0334], NFD: [0x3304, 0x0334], NFKC: [0x30A4, 0x30CB, 0x30F3, 0x30B0, 0x0334], NFKD: [0x30A4, 0x30CB, 0x30F3, 0x30AF, 0x0334, 0x3099] }, +{ source: [0x3307, 0x0334], NFC: [0x3307, 0x0334], NFD: [0x3307, 0x0334], NFKC: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9, 0x0334], NFKD: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C8, 0x0334, 0x3099] }, +{ source: [0x3310, 0x0334], NFC: [0x3310, 0x0334], NFD: [0x3310, 0x0334], NFKC: [0x30AE, 0x30AC, 0x0334], NFKD: [0x30AD, 0x3099, 0x30AB, 0x0334, 0x3099] }, +{ source: [0x331E, 0x0334], NFC: [0x331E, 0x0334], NFD: [0x331E, 0x0334], NFKC: [0x30B3, 0x30FC, 0x30DD, 0x0334], NFKD: [0x30B3, 0x30FC, 0x30DB, 0x0334, 0x309A] }, +{ source: [0x3321, 0x0334], NFC: [0x3321, 0x0334], NFD: [0x3321, 0x0334], NFKC: [0x30B7, 0x30EA, 0x30F3, 0x30B0, 0x0334], NFKD: [0x30B7, 0x30EA, 0x30F3, 0x30AF, 0x0334, 0x3099] }, +{ source: [0x3332, 0x0334], NFC: [0x3332, 0x0334], NFD: [0x3332, 0x0334], NFKC: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9, 0x0334], NFKD: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C8, 0x0334, 0x3099] }, +{ source: [0x333B, 0x0334], NFC: [0x333B, 0x0334], NFD: [0x333B, 0x0334], NFKC: [0x30DA, 0x30FC, 0x30B8, 0x0334], NFKD: [0x30D8, 0x309A, 0x30FC, 0x30B7, 0x0334, 0x3099] }, +{ source: [0x3340, 0x0334], NFC: [0x3340, 0x0334], NFD: [0x3340, 0x0334], NFKC: [0x30DD, 0x30F3, 0x30C9, 0x0334], NFKD: [0x30DB, 0x309A, 0x30F3, 0x30C8, 0x0334, 0x3099] }, +{ source: [0x334B, 0x0334], NFC: [0x334B, 0x0334], NFD: [0x334B, 0x0334], NFKC: [0x30E1, 0x30AC, 0x0334], NFKD: [0x30E1, 0x30AB, 0x0334, 0x3099] }, +{ source: [0x334E, 0x0334], NFC: [0x334E, 0x0334], NFD: [0x334E, 0x0334], NFKC: [0x30E4, 0x30FC, 0x30C9, 0x0334], NFKD: [0x30E4, 0x30FC, 0x30C8, 0x0334, 0x3099] }, +{ source: [0xFEF5, 0x0656], NFC: [0xFEF5, 0x0656], NFD: [0xFEF5, 0x0656], NFKC: [0x0644, 0x0622, 0x0656], NFKD: [0x0644, 0x0627, 0x0656, 0x0653] }, +{ source: [0xFEF6, 0x0656], NFC: [0xFEF6, 0x0656], NFD: [0xFEF6, 0x0656], NFKC: [0x0644, 0x0622, 0x0656], NFKD: [0x0644, 0x0627, 0x0656, 0x0653] }, +{ source: [0xFEF7, 0x0656], NFC: [0xFEF7, 0x0656], NFD: [0xFEF7, 0x0656], NFKC: [0x0644, 0x0623, 0x0656], NFKD: [0x0644, 0x0627, 0x0656, 0x0654] }, +{ source: [0xFEF8, 0x0656], NFC: [0xFEF8, 0x0656], NFD: [0xFEF8, 0x0656], NFKC: [0x0644, 0x0623, 0x0656], NFKD: [0x0644, 0x0627, 0x0656, 0x0654] }, +{ source: [0xFEF9, 0x0334], NFC: [0xFEF9, 0x0334], NFD: [0xFEF9, 0x0334], NFKC: [0x0644, 0x0625, 0x0334], NFKD: [0x0644, 0x0627, 0x0334, 0x0655] }, +{ source: [0xFEFA, 0x0334], NFC: [0xFEFA, 0x0334], NFD: [0xFEFA, 0x0334], NFKC: [0x0644, 0x0625, 0x0334], NFKD: [0x0644, 0x0627, 0x0334, 0x0655] } ]; /* Part1 # Character by character test */ var tests_part1 = [ @@ -15100,6 +15120,8 @@ var tests_part1 = [ { source: [0xFFEC], NFC: [0xFFEC], NFD: [0xFFEC], NFKC: [0x2193], NFKD: [0x2193] }, { source: [0xFFED], NFC: [0xFFED], NFD: [0xFFED], NFKC: [0x25A0], NFKD: [0x25A0] }, { source: [0xFFEE], NFC: [0xFFEE], NFD: [0xFFEE], NFKC: [0x25CB], NFKD: [0x25CB] }, +{ source: [0x105C9], NFC: [0x105C9], NFD: [0x105D2, 0x0307], NFKC: [0x105C9], NFKD: [0x105D2, 0x0307] }, +{ source: [0x105E4], NFC: [0x105E4], NFD: [0x105DA, 0x0307], NFKC: [0x105E4], NFKD: [0x105DA, 0x0307] }, { source: [0x10781], NFC: [0x10781], NFD: [0x10781], NFKC: [0x02D0], NFKD: [0x02D0] }, { source: [0x10782], NFC: [0x10782], NFD: [0x10782], NFKC: [0x02D1], NFKD: [0x02D1] }, { source: [0x10783], NFC: [0x10783], NFD: [0x10783], NFKC: [0x00E6], NFKD: [0x00E6] }, @@ -15163,12 +15185,66 @@ var tests_part1 = [ { source: [0x1112F], NFC: [0x1112F], NFD: [0x11132, 0x11127], NFKC: [0x1112F], NFKD: [0x11132, 0x11127] }, { source: [0x1134B], NFC: [0x1134B], NFD: [0x11347, 0x1133E], NFKC: [0x1134B], NFKD: [0x11347, 0x1133E] }, { source: [0x1134C], NFC: [0x1134C], NFD: [0x11347, 0x11357], NFKC: [0x1134C], NFKD: [0x11347, 0x11357] }, +{ source: [0x11383], NFC: [0x11383], NFD: [0x11382, 0x113C9], NFKC: [0x11383], NFKD: [0x11382, 0x113C9] }, +{ source: [0x11385], NFC: [0x11385], NFD: [0x11384, 0x113BB], NFKC: [0x11385], NFKD: [0x11384, 0x113BB] }, +{ source: [0x1138E], NFC: [0x1138E], NFD: [0x1138B, 0x113C2], NFKC: [0x1138E], NFKD: [0x1138B, 0x113C2] }, +{ source: [0x11391], NFC: [0x11391], NFD: [0x11390, 0x113C9], NFKC: [0x11391], NFKD: [0x11390, 0x113C9] }, +{ source: [0x113C5], NFC: [0x113C5], NFD: [0x113C2, 0x113C2], NFKC: [0x113C5], NFKD: [0x113C2, 0x113C2] }, +{ source: [0x113C7], NFC: [0x113C7], NFD: [0x113C2, 0x113B8], NFKC: [0x113C7], NFKD: [0x113C2, 0x113B8] }, +{ source: [0x113C8], NFC: [0x113C8], NFD: [0x113C2, 0x113C9], NFKC: [0x113C8], NFKD: [0x113C2, 0x113C9] }, { source: [0x114BB], NFC: [0x114BB], NFD: [0x114B9, 0x114BA], NFKC: [0x114BB], NFKD: [0x114B9, 0x114BA] }, { source: [0x114BC], NFC: [0x114BC], NFD: [0x114B9, 0x114B0], NFKC: [0x114BC], NFKD: [0x114B9, 0x114B0] }, { source: [0x114BE], NFC: [0x114BE], NFD: [0x114B9, 0x114BD], NFKC: [0x114BE], NFKD: [0x114B9, 0x114BD] }, { source: [0x115BA], NFC: [0x115BA], NFD: [0x115B8, 0x115AF], NFKC: [0x115BA], NFKD: [0x115B8, 0x115AF] }, { source: [0x115BB], NFC: [0x115BB], NFD: [0x115B9, 0x115AF], NFKC: [0x115BB], NFKD: [0x115B9, 0x115AF] }, { source: [0x11938], NFC: [0x11938], NFD: [0x11935, 0x11930], NFKC: [0x11938], NFKD: [0x11935, 0x11930] }, +{ source: [0x16121], NFC: [0x16121], NFD: [0x1611E, 0x1611E], NFKC: [0x16121], NFKD: [0x1611E, 0x1611E] }, +{ source: [0x16122], NFC: [0x16122], NFD: [0x1611E, 0x16129], NFKC: [0x16122], NFKD: [0x1611E, 0x16129] }, +{ source: [0x16123], NFC: [0x16123], NFD: [0x1611E, 0x1611F], NFKC: [0x16123], NFKD: [0x1611E, 0x1611F] }, +{ source: [0x16124], NFC: [0x16124], NFD: [0x16129, 0x1611F], NFKC: [0x16124], NFKD: [0x16129, 0x1611F] }, +{ source: [0x16125], NFC: [0x16125], NFD: [0x1611E, 0x16120], NFKC: [0x16125], NFKD: [0x1611E, 0x16120] }, +{ source: [0x16126], NFC: [0x16126], NFD: [0x1611E, 0x1611E, 0x1611F], NFKC: [0x16126], NFKD: [0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x16127], NFC: [0x16127], NFD: [0x1611E, 0x16129, 0x1611F], NFKC: [0x16127], NFKD: [0x1611E, 0x16129, 0x1611F] }, +{ source: [0x16128], NFC: [0x16128], NFD: [0x1611E, 0x1611E, 0x16120], NFKC: [0x16128], NFKD: [0x1611E, 0x1611E, 0x16120] }, +{ source: [0x16D68], NFC: [0x16D68], NFD: [0x16D67, 0x16D67], NFKC: [0x16D68], NFKD: [0x16D67, 0x16D67] }, +{ source: [0x16D69], NFC: [0x16D69], NFD: [0x16D63, 0x16D67], NFKC: [0x16D69], NFKD: [0x16D63, 0x16D67] }, +{ source: [0x16D6A], NFC: [0x16D6A], NFD: [0x16D63, 0x16D67, 0x16D67], NFKC: [0x16D6A], NFKD: [0x16D63, 0x16D67, 0x16D67] }, +{ source: [0x1CCD6], NFC: [0x1CCD6], NFD: [0x1CCD6], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1CCD7], NFC: [0x1CCD7], NFD: [0x1CCD7], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1CCD8], NFC: [0x1CCD8], NFD: [0x1CCD8], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1CCD9], NFC: [0x1CCD9], NFD: [0x1CCD9], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1CCDA], NFC: [0x1CCDA], NFD: [0x1CCDA], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1CCDB], NFC: [0x1CCDB], NFD: [0x1CCDB], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1CCDC], NFC: [0x1CCDC], NFD: [0x1CCDC], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1CCDD], NFC: [0x1CCDD], NFD: [0x1CCDD], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1CCDE], NFC: [0x1CCDE], NFD: [0x1CCDE], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1CCDF], NFC: [0x1CCDF], NFD: [0x1CCDF], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1CCE0], NFC: [0x1CCE0], NFD: [0x1CCE0], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1CCE1], NFC: [0x1CCE1], NFD: [0x1CCE1], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1CCE2], NFC: [0x1CCE2], NFD: [0x1CCE2], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1CCE3], NFC: [0x1CCE3], NFD: [0x1CCE3], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1CCE4], NFC: [0x1CCE4], NFD: [0x1CCE4], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1CCE5], NFC: [0x1CCE5], NFD: [0x1CCE5], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1CCE6], NFC: [0x1CCE6], NFD: [0x1CCE6], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1CCE7], NFC: [0x1CCE7], NFD: [0x1CCE7], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1CCE8], NFC: [0x1CCE8], NFD: [0x1CCE8], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1CCE9], NFC: [0x1CCE9], NFD: [0x1CCE9], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1CCEA], NFC: [0x1CCEA], NFD: [0x1CCEA], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1CCEB], NFC: [0x1CCEB], NFD: [0x1CCEB], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1CCEC], NFC: [0x1CCEC], NFD: [0x1CCEC], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1CCED], NFC: [0x1CCED], NFD: [0x1CCED], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1CCEE], NFC: [0x1CCEE], NFD: [0x1CCEE], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1CCEF], NFC: [0x1CCEF], NFD: [0x1CCEF], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1CCF0], NFC: [0x1CCF0], NFD: [0x1CCF0], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1CCF1], NFC: [0x1CCF1], NFD: [0x1CCF1], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1CCF2], NFC: [0x1CCF2], NFD: [0x1CCF2], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1CCF3], NFC: [0x1CCF3], NFD: [0x1CCF3], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1CCF4], NFC: [0x1CCF4], NFD: [0x1CCF4], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1CCF5], NFC: [0x1CCF5], NFD: [0x1CCF5], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1CCF6], NFC: [0x1CCF6], NFD: [0x1CCF6], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1CCF7], NFC: [0x1CCF7], NFD: [0x1CCF7], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1CCF8], NFC: [0x1CCF8], NFD: [0x1CCF8], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1CCF9], NFC: [0x1CCF9], NFD: [0x1CCF9], NFKC: [0x0039], NFKD: [0x0039] }, { source: [0x1D15E], NFC: [0x1D157, 0x1D165], NFD: [0x1D157, 0x1D165], NFKC: [0x1D157, 0x1D165], NFKD: [0x1D157, 0x1D165] }, { source: [0x1D15F], NFC: [0x1D158, 0x1D165], NFD: [0x1D158, 0x1D165], NFKC: [0x1D158, 0x1D165], NFKD: [0x1D158, 0x1D165] }, { source: [0x1D160], NFC: [0x1D158, 0x1D165, 0x1D16E], NFD: [0x1D158, 0x1D165, 0x1D16E], NFKC: [0x1D158, 0x1D165, 0x1D16E], NFKD: [0x1D158, 0x1D165, 0x1D16E] }, @@ -17634,6 +17710,8 @@ var tests_part2 = [ { source: [0x0061, 0x085A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062] }, { source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x085B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062] }, { source: [0x0061, 0x085B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0897, 0x0062], NFC: [0x00E0, 0x05AE, 0x0897, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0897, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0897, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0897, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0897, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0897, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0897, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0897, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0897, 0x0300, 0x0315, 0x0062] }, { source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0898, 0x0062], NFC: [0x00E0, 0x05AE, 0x0898, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0898, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0898, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0898, 0x0315, 0x0062] }, { source: [0x0061, 0x0898, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062] }, { source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0899, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062] }, @@ -18524,6 +18602,16 @@ var tests_part2 = [ { source: [0x0061, 0x10D26, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062] }, { source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D27, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D27, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D27, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D27, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D27, 0x0315, 0x0062] }, { source: [0x0061, 0x10D27, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D69, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D69, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D69, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D69, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D69, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D69, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D69, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D69, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D69, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D69, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D6A, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D6A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D6A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D6A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D6A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D6A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D6A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D6A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D6A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D6A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D6B, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D6B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D6B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D6B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D6B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D6B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D6B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D6B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D6B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D6B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D6C, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D6C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D6C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D6C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D6C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D6C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D6C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D6C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D6C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D6C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D6D, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D6D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D6D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D6D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D6D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D6D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D6D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D6D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D6D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D6D, 0x0300, 0x0315, 0x0062] }, { source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10EAB, 0x0062], NFC: [0x00E0, 0x05AE, 0x10EAB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10EAB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10EAB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10EAB, 0x0315, 0x0062] }, { source: [0x0061, 0x10EAB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062] }, { source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10EAC, 0x0062], NFC: [0x00E0, 0x05AE, 0x10EAC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10EAC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10EAC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10EAC, 0x0315, 0x0062] }, @@ -18628,6 +18716,12 @@ var tests_part2 = [ { source: [0x0061, 0x11373, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062] }, { source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11374, 0x0062], NFC: [0x00E0, 0x05AE, 0x11374, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11374, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11374, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11374, 0x0315, 0x0062] }, { source: [0x0061, 0x11374, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x113CE, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x113CE, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x113CE, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x113CE, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x113CE, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x113CE, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x113CE, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x113CE, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x113CE, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x113CE, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x113CF, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x113CF, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x113CF, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x113CF, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x113CF, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x113CF, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x113CF, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x113CF, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x113CF, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x113CF, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x113D0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x113D0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x113D0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x113D0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x113D0, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x113D0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x113D0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x113D0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x113D0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x113D0, 0x094D, 0x05B0, 0x0062] }, { source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11442, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062] }, { source: [0x0061, 0x11442, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062] }, { source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x11446, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062] }, @@ -18682,6 +18776,8 @@ var tests_part2 = [ { source: [0x0061, 0x11F41, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062] }, { source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11F42, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062] }, { source: [0x0061, 0x11F42, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1612F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1612F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1612F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1612F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1612F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1612F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1612F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1612F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1612F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1612F, 0x094D, 0x05B0, 0x0062] }, { source: [0x0061, 0x16FF0, 0x0334, 0x16AF0, 0x0062], NFC: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062] }, { source: [0x0061, 0x16AF0, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062] }, { source: [0x0061, 0x16FF0, 0x0334, 0x16AF1, 0x0062], NFC: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062] }, @@ -18888,6 +18984,10 @@ var tests_part2 = [ { source: [0x0061, 0x1E4EE, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062] }, { source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E4EF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E4EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E4EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E4EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E4EF, 0x0315, 0x0062] }, { source: [0x0061, 0x1E4EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E5EE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E5EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E5EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E5EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E5EE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E5EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E5EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E5EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E5EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E5EE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E5EF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E5EF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E5EF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E5EF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E5EF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E5EF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E5EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E5EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E5EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E5EF, 0x0316, 0x059A, 0x0062] }, { source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D0, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062] }, { source: [0x0061, 0x1E8D0, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062] }, { source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D1, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062] }, @@ -19089,10 +19189,807 @@ var tests_part3 = [ { source: [0x11132, 0x0334, 0x11127], NFC: [0x11132, 0x0334, 0x11127], NFD: [0x11132, 0x0334, 0x11127], NFKC: [0x11132, 0x0334, 0x11127], NFKD: [0x11132, 0x0334, 0x11127] }, { source: [0x11347, 0x0334, 0x1133E], NFC: [0x11347, 0x0334, 0x1133E], NFD: [0x11347, 0x0334, 0x1133E], NFKC: [0x11347, 0x0334, 0x1133E], NFKD: [0x11347, 0x0334, 0x1133E] }, { source: [0x11347, 0x0334, 0x11357], NFC: [0x11347, 0x0334, 0x11357], NFD: [0x11347, 0x0334, 0x11357], NFKC: [0x11347, 0x0334, 0x11357], NFKD: [0x11347, 0x0334, 0x11357] }, +{ source: [0x11382, 0x0334, 0x113C9], NFC: [0x11382, 0x0334, 0x113C9], NFD: [0x11382, 0x0334, 0x113C9], NFKC: [0x11382, 0x0334, 0x113C9], NFKD: [0x11382, 0x0334, 0x113C9] }, +{ source: [0x11384, 0x0334, 0x113BB], NFC: [0x11384, 0x0334, 0x113BB], NFD: [0x11384, 0x0334, 0x113BB], NFKC: [0x11384, 0x0334, 0x113BB], NFKD: [0x11384, 0x0334, 0x113BB] }, +{ source: [0x1138B, 0x0334, 0x113C2], NFC: [0x1138B, 0x0334, 0x113C2], NFD: [0x1138B, 0x0334, 0x113C2], NFKC: [0x1138B, 0x0334, 0x113C2], NFKD: [0x1138B, 0x0334, 0x113C2] }, +{ source: [0x11390, 0x0334, 0x113C9], NFC: [0x11390, 0x0334, 0x113C9], NFD: [0x11390, 0x0334, 0x113C9], NFKC: [0x11390, 0x0334, 0x113C9], NFKD: [0x11390, 0x0334, 0x113C9] }, +{ source: [0x113C2, 0x0334, 0x113B8], NFC: [0x113C2, 0x0334, 0x113B8], NFD: [0x113C2, 0x0334, 0x113B8], NFKC: [0x113C2, 0x0334, 0x113B8], NFKD: [0x113C2, 0x0334, 0x113B8] }, +{ source: [0x113C2, 0x0334, 0x113C2], NFC: [0x113C2, 0x0334, 0x113C2], NFD: [0x113C2, 0x0334, 0x113C2], NFKC: [0x113C2, 0x0334, 0x113C2], NFKD: [0x113C2, 0x0334, 0x113C2] }, +{ source: [0x113C2, 0x0334, 0x113C9], NFC: [0x113C2, 0x0334, 0x113C9], NFD: [0x113C2, 0x0334, 0x113C9], NFKC: [0x113C2, 0x0334, 0x113C9], NFKD: [0x113C2, 0x0334, 0x113C9] }, { source: [0x114B9, 0x0334, 0x114B0], NFC: [0x114B9, 0x0334, 0x114B0], NFD: [0x114B9, 0x0334, 0x114B0], NFKC: [0x114B9, 0x0334, 0x114B0], NFKD: [0x114B9, 0x0334, 0x114B0] }, { source: [0x114B9, 0x0334, 0x114BA], NFC: [0x114B9, 0x0334, 0x114BA], NFD: [0x114B9, 0x0334, 0x114BA], NFKC: [0x114B9, 0x0334, 0x114BA], NFKD: [0x114B9, 0x0334, 0x114BA] }, { source: [0x114B9, 0x0334, 0x114BD], NFC: [0x114B9, 0x0334, 0x114BD], NFD: [0x114B9, 0x0334, 0x114BD], NFKC: [0x114B9, 0x0334, 0x114BD], NFKD: [0x114B9, 0x0334, 0x114BD] }, { source: [0x115B8, 0x0334, 0x115AF], NFC: [0x115B8, 0x0334, 0x115AF], NFD: [0x115B8, 0x0334, 0x115AF], NFKC: [0x115B8, 0x0334, 0x115AF], NFKD: [0x115B8, 0x0334, 0x115AF] }, { source: [0x115B9, 0x0334, 0x115AF], NFC: [0x115B9, 0x0334, 0x115AF], NFD: [0x115B9, 0x0334, 0x115AF], NFKC: [0x115B9, 0x0334, 0x115AF], NFKD: [0x115B9, 0x0334, 0x115AF] }, -{ source: [0x11935, 0x0334, 0x11930], NFC: [0x11935, 0x0334, 0x11930], NFD: [0x11935, 0x0334, 0x11930], NFKC: [0x11935, 0x0334, 0x11930], NFKD: [0x11935, 0x0334, 0x11930] } +{ source: [0x11935, 0x0334, 0x11930], NFC: [0x11935, 0x0334, 0x11930], NFD: [0x11935, 0x0334, 0x11930], NFKC: [0x11935, 0x0334, 0x11930], NFKD: [0x11935, 0x0334, 0x11930] }, +{ source: [0x1611E, 0x0334, 0x1611E], NFC: [0x1611E, 0x0334, 0x1611E], NFD: [0x1611E, 0x0334, 0x1611E], NFKC: [0x1611E, 0x0334, 0x1611E], NFKD: [0x1611E, 0x0334, 0x1611E] }, +{ source: [0x1611E, 0x0334, 0x1611F], NFC: [0x1611E, 0x0334, 0x1611F], NFD: [0x1611E, 0x0334, 0x1611F], NFKC: [0x1611E, 0x0334, 0x1611F], NFKD: [0x1611E, 0x0334, 0x1611F] }, +{ source: [0x1611E, 0x0334, 0x16120], NFC: [0x1611E, 0x0334, 0x16120], NFD: [0x1611E, 0x0334, 0x16120], NFKC: [0x1611E, 0x0334, 0x16120], NFKD: [0x1611E, 0x0334, 0x16120] }, +{ source: [0x1611E, 0x0334, 0x16129], NFC: [0x1611E, 0x0334, 0x16129], NFD: [0x1611E, 0x0334, 0x16129], NFKC: [0x1611E, 0x0334, 0x16129], NFKD: [0x1611E, 0x0334, 0x16129] }, +{ source: [0x16121, 0x0334, 0x1611F], NFC: [0x16121, 0x0334, 0x1611F], NFD: [0x1611E, 0x1611E, 0x0334, 0x1611F], NFKC: [0x16121, 0x0334, 0x1611F], NFKD: [0x1611E, 0x1611E, 0x0334, 0x1611F] }, +{ source: [0x16121, 0x0334, 0x16120], NFC: [0x16121, 0x0334, 0x16120], NFD: [0x1611E, 0x1611E, 0x0334, 0x16120], NFKC: [0x16121, 0x0334, 0x16120], NFKD: [0x1611E, 0x1611E, 0x0334, 0x16120] }, +{ source: [0x16122, 0x0334, 0x1611F], NFC: [0x16122, 0x0334, 0x1611F], NFD: [0x1611E, 0x16129, 0x0334, 0x1611F], NFKC: [0x16122, 0x0334, 0x1611F], NFKD: [0x1611E, 0x16129, 0x0334, 0x1611F] }, +{ source: [0x16129, 0x0334, 0x1611F], NFC: [0x16129, 0x0334, 0x1611F], NFD: [0x16129, 0x0334, 0x1611F], NFKC: [0x16129, 0x0334, 0x1611F], NFKD: [0x16129, 0x0334, 0x1611F] }, +{ source: [0x16D63, 0x0334, 0x16D67], NFC: [0x16D63, 0x0334, 0x16D67], NFD: [0x16D63, 0x0334, 0x16D67], NFKC: [0x16D63, 0x0334, 0x16D67], NFKD: [0x16D63, 0x0334, 0x16D67] }, +{ source: [0x16D67, 0x0334, 0x16D67], NFC: [0x16D67, 0x0334, 0x16D67], NFD: [0x16D67, 0x0334, 0x16D67], NFKC: [0x16D67, 0x0334, 0x16D67], NFKD: [0x16D67, 0x0334, 0x16D67] }, +{ source: [0x16D69, 0x0334, 0x16D67], NFC: [0x16D69, 0x0334, 0x16D67], NFD: [0x16D63, 0x16D67, 0x0334, 0x16D67], NFKC: [0x16D69, 0x0334, 0x16D67], NFKD: [0x16D63, 0x16D67, 0x0334, 0x16D67] } +]; +/* Part4 # Canonical closures (excluding Hangul) */ +var tests_part4 = [ +{ source: [0x00DC, 0x0304], NFC: [0x01D5], NFD: [0x0055, 0x0308, 0x0304], NFKC: [0x01D5], NFKD: [0x0055, 0x0308, 0x0304] }, +{ source: [0x00FC, 0x0304], NFC: [0x01D6], NFD: [0x0075, 0x0308, 0x0304], NFKC: [0x01D6], NFKD: [0x0075, 0x0308, 0x0304] }, +{ source: [0x0055, 0x0344], NFC: [0x01D7], NFD: [0x0055, 0x0308, 0x0301], NFKC: [0x01D7], NFKD: [0x0055, 0x0308, 0x0301] }, +{ source: [0x00DC, 0x0301], NFC: [0x01D7], NFD: [0x0055, 0x0308, 0x0301], NFKC: [0x01D7], NFKD: [0x0055, 0x0308, 0x0301] }, +{ source: [0x00DC, 0x0341], NFC: [0x01D7], NFD: [0x0055, 0x0308, 0x0301], NFKC: [0x01D7], NFKD: [0x0055, 0x0308, 0x0301] }, +{ source: [0x0075, 0x0344], NFC: [0x01D8], NFD: [0x0075, 0x0308, 0x0301], NFKC: [0x01D8], NFKD: [0x0075, 0x0308, 0x0301] }, +{ source: [0x00FC, 0x0301], NFC: [0x01D8], NFD: [0x0075, 0x0308, 0x0301], NFKC: [0x01D8], NFKD: [0x0075, 0x0308, 0x0301] }, +{ source: [0x00FC, 0x0341], NFC: [0x01D8], NFD: [0x0075, 0x0308, 0x0301], NFKC: [0x01D8], NFKD: [0x0075, 0x0308, 0x0301] }, +{ source: [0x00DC, 0x030C], NFC: [0x01D9], NFD: [0x0055, 0x0308, 0x030C], NFKC: [0x01D9], NFKD: [0x0055, 0x0308, 0x030C] }, +{ source: [0x00FC, 0x030C], NFC: [0x01DA], NFD: [0x0075, 0x0308, 0x030C], NFKC: [0x01DA], NFKD: [0x0075, 0x0308, 0x030C] }, +{ source: [0x00DC, 0x0300], NFC: [0x01DB], NFD: [0x0055, 0x0308, 0x0300], NFKC: [0x01DB], NFKD: [0x0055, 0x0308, 0x0300] }, +{ source: [0x00DC, 0x0340], NFC: [0x01DB], NFD: [0x0055, 0x0308, 0x0300], NFKC: [0x01DB], NFKD: [0x0055, 0x0308, 0x0300] }, +{ source: [0x00FC, 0x0300], NFC: [0x01DC], NFD: [0x0075, 0x0308, 0x0300], NFKC: [0x01DC], NFKD: [0x0075, 0x0308, 0x0300] }, +{ source: [0x00FC, 0x0340], NFC: [0x01DC], NFD: [0x0075, 0x0308, 0x0300], NFKC: [0x01DC], NFKD: [0x0075, 0x0308, 0x0300] }, +{ source: [0x00C4, 0x0304], NFC: [0x01DE], NFD: [0x0041, 0x0308, 0x0304], NFKC: [0x01DE], NFKD: [0x0041, 0x0308, 0x0304] }, +{ source: [0x00E4, 0x0304], NFC: [0x01DF], NFD: [0x0061, 0x0308, 0x0304], NFKC: [0x01DF], NFKD: [0x0061, 0x0308, 0x0304] }, +{ source: [0x0226, 0x0304], NFC: [0x01E0], NFD: [0x0041, 0x0307, 0x0304], NFKC: [0x01E0], NFKD: [0x0041, 0x0307, 0x0304] }, +{ source: [0x0227, 0x0304], NFC: [0x01E1], NFD: [0x0061, 0x0307, 0x0304], NFKC: [0x01E1], NFKD: [0x0061, 0x0307, 0x0304] }, +{ source: [0x014C, 0x0328], NFC: [0x01EC], NFD: [0x004F, 0x0328, 0x0304], NFKC: [0x01EC], NFKD: [0x004F, 0x0328, 0x0304] }, +{ source: [0x01EA, 0x0304], NFC: [0x01EC], NFD: [0x004F, 0x0328, 0x0304], NFKC: [0x01EC], NFKD: [0x004F, 0x0328, 0x0304] }, +{ source: [0x014D, 0x0328], NFC: [0x01ED], NFD: [0x006F, 0x0328, 0x0304], NFKC: [0x01ED], NFKD: [0x006F, 0x0328, 0x0304] }, +{ source: [0x01EB, 0x0304], NFC: [0x01ED], NFD: [0x006F, 0x0328, 0x0304], NFKC: [0x01ED], NFKD: [0x006F, 0x0328, 0x0304] }, +{ source: [0x00C5, 0x0301], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] }, +{ source: [0x00C5, 0x0341], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] }, +{ source: [0x212B, 0x0301], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] }, +{ source: [0x212B, 0x0341], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] }, +{ source: [0x00E5, 0x0301], NFC: [0x01FB], NFD: [0x0061, 0x030A, 0x0301], NFKC: [0x01FB], NFKD: [0x0061, 0x030A, 0x0301] }, +{ source: [0x00E5, 0x0341], NFC: [0x01FB], NFD: [0x0061, 0x030A, 0x0301], NFKC: [0x01FB], NFKD: [0x0061, 0x030A, 0x0301] }, +{ source: [0x00D6, 0x0304], NFC: [0x022A], NFD: [0x004F, 0x0308, 0x0304], NFKC: [0x022A], NFKD: [0x004F, 0x0308, 0x0304] }, +{ source: [0x00F6, 0x0304], NFC: [0x022B], NFD: [0x006F, 0x0308, 0x0304], NFKC: [0x022B], NFKD: [0x006F, 0x0308, 0x0304] }, +{ source: [0x00D5, 0x0304], NFC: [0x022C], NFD: [0x004F, 0x0303, 0x0304], NFKC: [0x022C], NFKD: [0x004F, 0x0303, 0x0304] }, +{ source: [0x00F5, 0x0304], NFC: [0x022D], NFD: [0x006F, 0x0303, 0x0304], NFKC: [0x022D], NFKD: [0x006F, 0x0303, 0x0304] }, +{ source: [0x022E, 0x0304], NFC: [0x0230], NFD: [0x004F, 0x0307, 0x0304], NFKC: [0x0230], NFKD: [0x004F, 0x0307, 0x0304] }, +{ source: [0x022F, 0x0304], NFC: [0x0231], NFD: [0x006F, 0x0307, 0x0304], NFKC: [0x0231], NFKD: [0x006F, 0x0307, 0x0304] }, +{ source: [0x03B9, 0x0344], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03CA, 0x0301], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03CA, 0x0341], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x1FBE, 0x0344], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03C5, 0x0344], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CB, 0x0301], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CB, 0x0341], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x0CCA, 0x0CD5], NFC: [0x0CCB], NFD: [0x0CC6, 0x0CC2, 0x0CD5], NFKC: [0x0CCB], NFKD: [0x0CC6, 0x0CC2, 0x0CD5] }, +{ source: [0x0DDC, 0x0DCA], NFC: [0x0DDD], NFD: [0x0DD9, 0x0DCF, 0x0DCA], NFKC: [0x0DDD], NFKD: [0x0DD9, 0x0DCF, 0x0DCA] }, +{ source: [0x00C7, 0x0301], NFC: [0x1E08], NFD: [0x0043, 0x0327, 0x0301], NFKC: [0x1E08], NFKD: [0x0043, 0x0327, 0x0301] }, +{ source: [0x00C7, 0x0341], NFC: [0x1E08], NFD: [0x0043, 0x0327, 0x0301], NFKC: [0x1E08], NFKD: [0x0043, 0x0327, 0x0301] }, +{ source: [0x0106, 0x0327], NFC: [0x1E08], NFD: [0x0043, 0x0327, 0x0301], NFKC: [0x1E08], NFKD: [0x0043, 0x0327, 0x0301] }, +{ source: [0x00E7, 0x0301], NFC: [0x1E09], NFD: [0x0063, 0x0327, 0x0301], NFKC: [0x1E09], NFKD: [0x0063, 0x0327, 0x0301] }, +{ source: [0x00E7, 0x0341], NFC: [0x1E09], NFD: [0x0063, 0x0327, 0x0301], NFKC: [0x1E09], NFKD: [0x0063, 0x0327, 0x0301] }, +{ source: [0x0107, 0x0327], NFC: [0x1E09], NFD: [0x0063, 0x0327, 0x0301], NFKC: [0x1E09], NFKD: [0x0063, 0x0327, 0x0301] }, +{ source: [0x0112, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x0112, 0x0340], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x0113, 0x0300], NFC: [0x1E15], NFD: [0x0065, 0x0304, 0x0300], NFKC: [0x1E15], NFKD: [0x0065, 0x0304, 0x0300] }, +{ source: [0x0113, 0x0340], NFC: [0x1E15], NFD: [0x0065, 0x0304, 0x0300], NFKC: [0x1E15], NFKD: [0x0065, 0x0304, 0x0300] }, +{ source: [0x0112, 0x0301], NFC: [0x1E16], NFD: [0x0045, 0x0304, 0x0301], NFKC: [0x1E16], NFKD: [0x0045, 0x0304, 0x0301] }, +{ source: [0x0112, 0x0341], NFC: [0x1E16], NFD: [0x0045, 0x0304, 0x0301], NFKC: [0x1E16], NFKD: [0x0045, 0x0304, 0x0301] }, +{ source: [0x0113, 0x0301], NFC: [0x1E17], NFD: [0x0065, 0x0304, 0x0301], NFKC: [0x1E17], NFKD: [0x0065, 0x0304, 0x0301] }, +{ source: [0x0113, 0x0341], NFC: [0x1E17], NFD: [0x0065, 0x0304, 0x0301], NFKC: [0x1E17], NFKD: [0x0065, 0x0304, 0x0301] }, +{ source: [0x0114, 0x0327], NFC: [0x1E1C], NFD: [0x0045, 0x0327, 0x0306], NFKC: [0x1E1C], NFKD: [0x0045, 0x0327, 0x0306] }, +{ source: [0x0228, 0x0306], NFC: [0x1E1C], NFD: [0x0045, 0x0327, 0x0306], NFKC: [0x1E1C], NFKD: [0x0045, 0x0327, 0x0306] }, +{ source: [0x0115, 0x0327], NFC: [0x1E1D], NFD: [0x0065, 0x0327, 0x0306], NFKC: [0x1E1D], NFKD: [0x0065, 0x0327, 0x0306] }, +{ source: [0x0229, 0x0306], NFC: [0x1E1D], NFD: [0x0065, 0x0327, 0x0306], NFKC: [0x1E1D], NFKD: [0x0065, 0x0327, 0x0306] }, +{ source: [0x0049, 0x0344], NFC: [0x1E2E], NFD: [0x0049, 0x0308, 0x0301], NFKC: [0x1E2E], NFKD: [0x0049, 0x0308, 0x0301] }, +{ source: [0x00CF, 0x0301], NFC: [0x1E2E], NFD: [0x0049, 0x0308, 0x0301], NFKC: [0x1E2E], NFKD: [0x0049, 0x0308, 0x0301] }, +{ source: [0x00CF, 0x0341], NFC: [0x1E2E], NFD: [0x0049, 0x0308, 0x0301], NFKC: [0x1E2E], NFKD: [0x0049, 0x0308, 0x0301] }, +{ source: [0x0069, 0x0344], NFC: [0x1E2F], NFD: [0x0069, 0x0308, 0x0301], NFKC: [0x1E2F], NFKD: [0x0069, 0x0308, 0x0301] }, +{ source: [0x00EF, 0x0301], NFC: [0x1E2F], NFD: [0x0069, 0x0308, 0x0301], NFKC: [0x1E2F], NFKD: [0x0069, 0x0308, 0x0301] }, +{ source: [0x00EF, 0x0341], NFC: [0x1E2F], NFD: [0x0069, 0x0308, 0x0301], NFKC: [0x1E2F], NFKD: [0x0069, 0x0308, 0x0301] }, +{ source: [0x1E36, 0x0304], NFC: [0x1E38], NFD: [0x004C, 0x0323, 0x0304], NFKC: [0x1E38], NFKD: [0x004C, 0x0323, 0x0304] }, +{ source: [0x1E37, 0x0304], NFC: [0x1E39], NFD: [0x006C, 0x0323, 0x0304], NFKC: [0x1E39], NFKD: [0x006C, 0x0323, 0x0304] }, +{ source: [0x00D5, 0x0301], NFC: [0x1E4C], NFD: [0x004F, 0x0303, 0x0301], NFKC: [0x1E4C], NFKD: [0x004F, 0x0303, 0x0301] }, +{ source: [0x00D5, 0x0341], NFC: [0x1E4C], NFD: [0x004F, 0x0303, 0x0301], NFKC: [0x1E4C], NFKD: [0x004F, 0x0303, 0x0301] }, +{ source: [0x00F5, 0x0301], NFC: [0x1E4D], NFD: [0x006F, 0x0303, 0x0301], NFKC: [0x1E4D], NFKD: [0x006F, 0x0303, 0x0301] }, +{ source: [0x00F5, 0x0341], NFC: [0x1E4D], NFD: [0x006F, 0x0303, 0x0301], NFKC: [0x1E4D], NFKD: [0x006F, 0x0303, 0x0301] }, +{ source: [0x00D5, 0x0308], NFC: [0x1E4E], NFD: [0x004F, 0x0303, 0x0308], NFKC: [0x1E4E], NFKD: [0x004F, 0x0303, 0x0308] }, +{ source: [0x00F5, 0x0308], NFC: [0x1E4F], NFD: [0x006F, 0x0303, 0x0308], NFKC: [0x1E4F], NFKD: [0x006F, 0x0303, 0x0308] }, +{ source: [0x014C, 0x0300], NFC: [0x1E50], NFD: [0x004F, 0x0304, 0x0300], NFKC: [0x1E50], NFKD: [0x004F, 0x0304, 0x0300] }, +{ source: [0x014C, 0x0340], NFC: [0x1E50], NFD: [0x004F, 0x0304, 0x0300], NFKC: [0x1E50], NFKD: [0x004F, 0x0304, 0x0300] }, +{ source: [0x014D, 0x0300], NFC: [0x1E51], NFD: [0x006F, 0x0304, 0x0300], NFKC: [0x1E51], NFKD: [0x006F, 0x0304, 0x0300] }, +{ source: [0x014D, 0x0340], NFC: [0x1E51], NFD: [0x006F, 0x0304, 0x0300], NFKC: [0x1E51], NFKD: [0x006F, 0x0304, 0x0300] }, +{ source: [0x014C, 0x0301], NFC: [0x1E52], NFD: [0x004F, 0x0304, 0x0301], NFKC: [0x1E52], NFKD: [0x004F, 0x0304, 0x0301] }, +{ source: [0x014C, 0x0341], NFC: [0x1E52], NFD: [0x004F, 0x0304, 0x0301], NFKC: [0x1E52], NFKD: [0x004F, 0x0304, 0x0301] }, +{ source: [0x014D, 0x0301], NFC: [0x1E53], NFD: [0x006F, 0x0304, 0x0301], NFKC: [0x1E53], NFKD: [0x006F, 0x0304, 0x0301] }, +{ source: [0x014D, 0x0341], NFC: [0x1E53], NFD: [0x006F, 0x0304, 0x0301], NFKC: [0x1E53], NFKD: [0x006F, 0x0304, 0x0301] }, +{ source: [0x1E5A, 0x0304], NFC: [0x1E5C], NFD: [0x0052, 0x0323, 0x0304], NFKC: [0x1E5C], NFKD: [0x0052, 0x0323, 0x0304] }, +{ source: [0x1E5B, 0x0304], NFC: [0x1E5D], NFD: [0x0072, 0x0323, 0x0304], NFKC: [0x1E5D], NFKD: [0x0072, 0x0323, 0x0304] }, +{ source: [0x015A, 0x0307], NFC: [0x1E64], NFD: [0x0053, 0x0301, 0x0307], NFKC: [0x1E64], NFKD: [0x0053, 0x0301, 0x0307] }, +{ source: [0x015B, 0x0307], NFC: [0x1E65], NFD: [0x0073, 0x0301, 0x0307], NFKC: [0x1E65], NFKD: [0x0073, 0x0301, 0x0307] }, +{ source: [0x0160, 0x0307], NFC: [0x1E66], NFD: [0x0053, 0x030C, 0x0307], NFKC: [0x1E66], NFKD: [0x0053, 0x030C, 0x0307] }, +{ source: [0x0161, 0x0307], NFC: [0x1E67], NFD: [0x0073, 0x030C, 0x0307], NFKC: [0x1E67], NFKD: [0x0073, 0x030C, 0x0307] }, +{ source: [0x1E60, 0x0323], NFC: [0x1E68], NFD: [0x0053, 0x0323, 0x0307], NFKC: [0x1E68], NFKD: [0x0053, 0x0323, 0x0307] }, +{ source: [0x1E62, 0x0307], NFC: [0x1E68], NFD: [0x0053, 0x0323, 0x0307], NFKC: [0x1E68], NFKD: [0x0053, 0x0323, 0x0307] }, +{ source: [0x1E61, 0x0323], NFC: [0x1E69], NFD: [0x0073, 0x0323, 0x0307], NFKC: [0x1E69], NFKD: [0x0073, 0x0323, 0x0307] }, +{ source: [0x1E63, 0x0307], NFC: [0x1E69], NFD: [0x0073, 0x0323, 0x0307], NFKC: [0x1E69], NFKD: [0x0073, 0x0323, 0x0307] }, +{ source: [0x0168, 0x0301], NFC: [0x1E78], NFD: [0x0055, 0x0303, 0x0301], NFKC: [0x1E78], NFKD: [0x0055, 0x0303, 0x0301] }, +{ source: [0x0168, 0x0341], NFC: [0x1E78], NFD: [0x0055, 0x0303, 0x0301], NFKC: [0x1E78], NFKD: [0x0055, 0x0303, 0x0301] }, +{ source: [0x0169, 0x0301], NFC: [0x1E79], NFD: [0x0075, 0x0303, 0x0301], NFKC: [0x1E79], NFKD: [0x0075, 0x0303, 0x0301] }, +{ source: [0x0169, 0x0341], NFC: [0x1E79], NFD: [0x0075, 0x0303, 0x0301], NFKC: [0x1E79], NFKD: [0x0075, 0x0303, 0x0301] }, +{ source: [0x016A, 0x0308], NFC: [0x1E7A], NFD: [0x0055, 0x0304, 0x0308], NFKC: [0x1E7A], NFKD: [0x0055, 0x0304, 0x0308] }, +{ source: [0x016B, 0x0308], NFC: [0x1E7B], NFD: [0x0075, 0x0304, 0x0308], NFKC: [0x1E7B], NFKD: [0x0075, 0x0304, 0x0308] }, +{ source: [0x00C2, 0x0301], NFC: [0x1EA4], NFD: [0x0041, 0x0302, 0x0301], NFKC: [0x1EA4], NFKD: [0x0041, 0x0302, 0x0301] }, +{ source: [0x00C2, 0x0341], NFC: [0x1EA4], NFD: [0x0041, 0x0302, 0x0301], NFKC: [0x1EA4], NFKD: [0x0041, 0x0302, 0x0301] }, +{ source: [0x00E2, 0x0301], NFC: [0x1EA5], NFD: [0x0061, 0x0302, 0x0301], NFKC: [0x1EA5], NFKD: [0x0061, 0x0302, 0x0301] }, +{ source: [0x00E2, 0x0341], NFC: [0x1EA5], NFD: [0x0061, 0x0302, 0x0301], NFKC: [0x1EA5], NFKD: [0x0061, 0x0302, 0x0301] }, +{ source: [0x00C2, 0x0300], NFC: [0x1EA6], NFD: [0x0041, 0x0302, 0x0300], NFKC: [0x1EA6], NFKD: [0x0041, 0x0302, 0x0300] }, +{ source: [0x00C2, 0x0340], NFC: [0x1EA6], NFD: [0x0041, 0x0302, 0x0300], NFKC: [0x1EA6], NFKD: [0x0041, 0x0302, 0x0300] }, +{ source: [0x00E2, 0x0300], NFC: [0x1EA7], NFD: [0x0061, 0x0302, 0x0300], NFKC: [0x1EA7], NFKD: [0x0061, 0x0302, 0x0300] }, +{ source: [0x00E2, 0x0340], NFC: [0x1EA7], NFD: [0x0061, 0x0302, 0x0300], NFKC: [0x1EA7], NFKD: [0x0061, 0x0302, 0x0300] }, +{ source: [0x00C2, 0x0309], NFC: [0x1EA8], NFD: [0x0041, 0x0302, 0x0309], NFKC: [0x1EA8], NFKD: [0x0041, 0x0302, 0x0309] }, +{ source: [0x00E2, 0x0309], NFC: [0x1EA9], NFD: [0x0061, 0x0302, 0x0309], NFKC: [0x1EA9], NFKD: [0x0061, 0x0302, 0x0309] }, +{ source: [0x00C2, 0x0303], NFC: [0x1EAA], NFD: [0x0041, 0x0302, 0x0303], NFKC: [0x1EAA], NFKD: [0x0041, 0x0302, 0x0303] }, +{ source: [0x00E2, 0x0303], NFC: [0x1EAB], NFD: [0x0061, 0x0302, 0x0303], NFKC: [0x1EAB], NFKD: [0x0061, 0x0302, 0x0303] }, +{ source: [0x00C2, 0x0323], NFC: [0x1EAC], NFD: [0x0041, 0x0323, 0x0302], NFKC: [0x1EAC], NFKD: [0x0041, 0x0323, 0x0302] }, +{ source: [0x1EA0, 0x0302], NFC: [0x1EAC], NFD: [0x0041, 0x0323, 0x0302], NFKC: [0x1EAC], NFKD: [0x0041, 0x0323, 0x0302] }, +{ source: [0x00E2, 0x0323], NFC: [0x1EAD], NFD: [0x0061, 0x0323, 0x0302], NFKC: [0x1EAD], NFKD: [0x0061, 0x0323, 0x0302] }, +{ source: [0x1EA1, 0x0302], NFC: [0x1EAD], NFD: [0x0061, 0x0323, 0x0302], NFKC: [0x1EAD], NFKD: [0x0061, 0x0323, 0x0302] }, +{ source: [0x0102, 0x0301], NFC: [0x1EAE], NFD: [0x0041, 0x0306, 0x0301], NFKC: [0x1EAE], NFKD: [0x0041, 0x0306, 0x0301] }, +{ source: [0x0102, 0x0341], NFC: [0x1EAE], NFD: [0x0041, 0x0306, 0x0301], NFKC: [0x1EAE], NFKD: [0x0041, 0x0306, 0x0301] }, +{ source: [0x0103, 0x0301], NFC: [0x1EAF], NFD: [0x0061, 0x0306, 0x0301], NFKC: [0x1EAF], NFKD: [0x0061, 0x0306, 0x0301] }, +{ source: [0x0103, 0x0341], NFC: [0x1EAF], NFD: [0x0061, 0x0306, 0x0301], NFKC: [0x1EAF], NFKD: [0x0061, 0x0306, 0x0301] }, +{ source: [0x0102, 0x0300], NFC: [0x1EB0], NFD: [0x0041, 0x0306, 0x0300], NFKC: [0x1EB0], NFKD: [0x0041, 0x0306, 0x0300] }, +{ source: [0x0102, 0x0340], NFC: [0x1EB0], NFD: [0x0041, 0x0306, 0x0300], NFKC: [0x1EB0], NFKD: [0x0041, 0x0306, 0x0300] }, +{ source: [0x0103, 0x0300], NFC: [0x1EB1], NFD: [0x0061, 0x0306, 0x0300], NFKC: [0x1EB1], NFKD: [0x0061, 0x0306, 0x0300] }, +{ source: [0x0103, 0x0340], NFC: [0x1EB1], NFD: [0x0061, 0x0306, 0x0300], NFKC: [0x1EB1], NFKD: [0x0061, 0x0306, 0x0300] }, +{ source: [0x0102, 0x0309], NFC: [0x1EB2], NFD: [0x0041, 0x0306, 0x0309], NFKC: [0x1EB2], NFKD: [0x0041, 0x0306, 0x0309] }, +{ source: [0x0103, 0x0309], NFC: [0x1EB3], NFD: [0x0061, 0x0306, 0x0309], NFKC: [0x1EB3], NFKD: [0x0061, 0x0306, 0x0309] }, +{ source: [0x0102, 0x0303], NFC: [0x1EB4], NFD: [0x0041, 0x0306, 0x0303], NFKC: [0x1EB4], NFKD: [0x0041, 0x0306, 0x0303] }, +{ source: [0x0103, 0x0303], NFC: [0x1EB5], NFD: [0x0061, 0x0306, 0x0303], NFKC: [0x1EB5], NFKD: [0x0061, 0x0306, 0x0303] }, +{ source: [0x0102, 0x0323], NFC: [0x1EB6], NFD: [0x0041, 0x0323, 0x0306], NFKC: [0x1EB6], NFKD: [0x0041, 0x0323, 0x0306] }, +{ source: [0x1EA0, 0x0306], NFC: [0x1EB6], NFD: [0x0041, 0x0323, 0x0306], NFKC: [0x1EB6], NFKD: [0x0041, 0x0323, 0x0306] }, +{ source: [0x0103, 0x0323], NFC: [0x1EB7], NFD: [0x0061, 0x0323, 0x0306], NFKC: [0x1EB7], NFKD: [0x0061, 0x0323, 0x0306] }, +{ source: [0x1EA1, 0x0306], NFC: [0x1EB7], NFD: [0x0061, 0x0323, 0x0306], NFKC: [0x1EB7], NFKD: [0x0061, 0x0323, 0x0306] }, +{ source: [0x00CA, 0x0301], NFC: [0x1EBE], NFD: [0x0045, 0x0302, 0x0301], NFKC: [0x1EBE], NFKD: [0x0045, 0x0302, 0x0301] }, +{ source: [0x00CA, 0x0341], NFC: [0x1EBE], NFD: [0x0045, 0x0302, 0x0301], NFKC: [0x1EBE], NFKD: [0x0045, 0x0302, 0x0301] }, +{ source: [0x00EA, 0x0301], NFC: [0x1EBF], NFD: [0x0065, 0x0302, 0x0301], NFKC: [0x1EBF], NFKD: [0x0065, 0x0302, 0x0301] }, +{ source: [0x00EA, 0x0341], NFC: [0x1EBF], NFD: [0x0065, 0x0302, 0x0301], NFKC: [0x1EBF], NFKD: [0x0065, 0x0302, 0x0301] }, +{ source: [0x00CA, 0x0300], NFC: [0x1EC0], NFD: [0x0045, 0x0302, 0x0300], NFKC: [0x1EC0], NFKD: [0x0045, 0x0302, 0x0300] }, +{ source: [0x00CA, 0x0340], NFC: [0x1EC0], NFD: [0x0045, 0x0302, 0x0300], NFKC: [0x1EC0], NFKD: [0x0045, 0x0302, 0x0300] }, +{ source: [0x00EA, 0x0300], NFC: [0x1EC1], NFD: [0x0065, 0x0302, 0x0300], NFKC: [0x1EC1], NFKD: [0x0065, 0x0302, 0x0300] }, +{ source: [0x00EA, 0x0340], NFC: [0x1EC1], NFD: [0x0065, 0x0302, 0x0300], NFKC: [0x1EC1], NFKD: [0x0065, 0x0302, 0x0300] }, +{ source: [0x00CA, 0x0309], NFC: [0x1EC2], NFD: [0x0045, 0x0302, 0x0309], NFKC: [0x1EC2], NFKD: [0x0045, 0x0302, 0x0309] }, +{ source: [0x00EA, 0x0309], NFC: [0x1EC3], NFD: [0x0065, 0x0302, 0x0309], NFKC: [0x1EC3], NFKD: [0x0065, 0x0302, 0x0309] }, +{ source: [0x00CA, 0x0303], NFC: [0x1EC4], NFD: [0x0045, 0x0302, 0x0303], NFKC: [0x1EC4], NFKD: [0x0045, 0x0302, 0x0303] }, +{ source: [0x00EA, 0x0303], NFC: [0x1EC5], NFD: [0x0065, 0x0302, 0x0303], NFKC: [0x1EC5], NFKD: [0x0065, 0x0302, 0x0303] }, +{ source: [0x00CA, 0x0323], NFC: [0x1EC6], NFD: [0x0045, 0x0323, 0x0302], NFKC: [0x1EC6], NFKD: [0x0045, 0x0323, 0x0302] }, +{ source: [0x1EB8, 0x0302], NFC: [0x1EC6], NFD: [0x0045, 0x0323, 0x0302], NFKC: [0x1EC6], NFKD: [0x0045, 0x0323, 0x0302] }, +{ source: [0x00EA, 0x0323], NFC: [0x1EC7], NFD: [0x0065, 0x0323, 0x0302], NFKC: [0x1EC7], NFKD: [0x0065, 0x0323, 0x0302] }, +{ source: [0x1EB9, 0x0302], NFC: [0x1EC7], NFD: [0x0065, 0x0323, 0x0302], NFKC: [0x1EC7], NFKD: [0x0065, 0x0323, 0x0302] }, +{ source: [0x00D4, 0x0301], NFC: [0x1ED0], NFD: [0x004F, 0x0302, 0x0301], NFKC: [0x1ED0], NFKD: [0x004F, 0x0302, 0x0301] }, +{ source: [0x00D4, 0x0341], NFC: [0x1ED0], NFD: [0x004F, 0x0302, 0x0301], NFKC: [0x1ED0], NFKD: [0x004F, 0x0302, 0x0301] }, +{ source: [0x00F4, 0x0301], NFC: [0x1ED1], NFD: [0x006F, 0x0302, 0x0301], NFKC: [0x1ED1], NFKD: [0x006F, 0x0302, 0x0301] }, +{ source: [0x00F4, 0x0341], NFC: [0x1ED1], NFD: [0x006F, 0x0302, 0x0301], NFKC: [0x1ED1], NFKD: [0x006F, 0x0302, 0x0301] }, +{ source: [0x00D4, 0x0300], NFC: [0x1ED2], NFD: [0x004F, 0x0302, 0x0300], NFKC: [0x1ED2], NFKD: [0x004F, 0x0302, 0x0300] }, +{ source: [0x00D4, 0x0340], NFC: [0x1ED2], NFD: [0x004F, 0x0302, 0x0300], NFKC: [0x1ED2], NFKD: [0x004F, 0x0302, 0x0300] }, +{ source: [0x00F4, 0x0300], NFC: [0x1ED3], NFD: [0x006F, 0x0302, 0x0300], NFKC: [0x1ED3], NFKD: [0x006F, 0x0302, 0x0300] }, +{ source: [0x00F4, 0x0340], NFC: [0x1ED3], NFD: [0x006F, 0x0302, 0x0300], NFKC: [0x1ED3], NFKD: [0x006F, 0x0302, 0x0300] }, +{ source: [0x00D4, 0x0309], NFC: [0x1ED4], NFD: [0x004F, 0x0302, 0x0309], NFKC: [0x1ED4], NFKD: [0x004F, 0x0302, 0x0309] }, +{ source: [0x00F4, 0x0309], NFC: [0x1ED5], NFD: [0x006F, 0x0302, 0x0309], NFKC: [0x1ED5], NFKD: [0x006F, 0x0302, 0x0309] }, +{ source: [0x00D4, 0x0303], NFC: [0x1ED6], NFD: [0x004F, 0x0302, 0x0303], NFKC: [0x1ED6], NFKD: [0x004F, 0x0302, 0x0303] }, +{ source: [0x00F4, 0x0303], NFC: [0x1ED7], NFD: [0x006F, 0x0302, 0x0303], NFKC: [0x1ED7], NFKD: [0x006F, 0x0302, 0x0303] }, +{ source: [0x00D4, 0x0323], NFC: [0x1ED8], NFD: [0x004F, 0x0323, 0x0302], NFKC: [0x1ED8], NFKD: [0x004F, 0x0323, 0x0302] }, +{ source: [0x1ECC, 0x0302], NFC: [0x1ED8], NFD: [0x004F, 0x0323, 0x0302], NFKC: [0x1ED8], NFKD: [0x004F, 0x0323, 0x0302] }, +{ source: [0x00F4, 0x0323], NFC: [0x1ED9], NFD: [0x006F, 0x0323, 0x0302], NFKC: [0x1ED9], NFKD: [0x006F, 0x0323, 0x0302] }, +{ source: [0x1ECD, 0x0302], NFC: [0x1ED9], NFD: [0x006F, 0x0323, 0x0302], NFKC: [0x1ED9], NFKD: [0x006F, 0x0323, 0x0302] }, +{ source: [0x00D3, 0x031B], NFC: [0x1EDA], NFD: [0x004F, 0x031B, 0x0301], NFKC: [0x1EDA], NFKD: [0x004F, 0x031B, 0x0301] }, +{ source: [0x01A0, 0x0301], NFC: [0x1EDA], NFD: [0x004F, 0x031B, 0x0301], NFKC: [0x1EDA], NFKD: [0x004F, 0x031B, 0x0301] }, +{ source: [0x01A0, 0x0341], NFC: [0x1EDA], NFD: [0x004F, 0x031B, 0x0301], NFKC: [0x1EDA], NFKD: [0x004F, 0x031B, 0x0301] }, +{ source: [0x00F3, 0x031B], NFC: [0x1EDB], NFD: [0x006F, 0x031B, 0x0301], NFKC: [0x1EDB], NFKD: [0x006F, 0x031B, 0x0301] }, +{ source: [0x01A1, 0x0301], NFC: [0x1EDB], NFD: [0x006F, 0x031B, 0x0301], NFKC: [0x1EDB], NFKD: [0x006F, 0x031B, 0x0301] }, +{ source: [0x01A1, 0x0341], NFC: [0x1EDB], NFD: [0x006F, 0x031B, 0x0301], NFKC: [0x1EDB], NFKD: [0x006F, 0x031B, 0x0301] }, +{ source: [0x00D2, 0x031B], NFC: [0x1EDC], NFD: [0x004F, 0x031B, 0x0300], NFKC: [0x1EDC], NFKD: [0x004F, 0x031B, 0x0300] }, +{ source: [0x01A0, 0x0300], NFC: [0x1EDC], NFD: [0x004F, 0x031B, 0x0300], NFKC: [0x1EDC], NFKD: [0x004F, 0x031B, 0x0300] }, +{ source: [0x01A0, 0x0340], NFC: [0x1EDC], NFD: [0x004F, 0x031B, 0x0300], NFKC: [0x1EDC], NFKD: [0x004F, 0x031B, 0x0300] }, +{ source: [0x00F2, 0x031B], NFC: [0x1EDD], NFD: [0x006F, 0x031B, 0x0300], NFKC: [0x1EDD], NFKD: [0x006F, 0x031B, 0x0300] }, +{ source: [0x01A1, 0x0300], NFC: [0x1EDD], NFD: [0x006F, 0x031B, 0x0300], NFKC: [0x1EDD], NFKD: [0x006F, 0x031B, 0x0300] }, +{ source: [0x01A1, 0x0340], NFC: [0x1EDD], NFD: [0x006F, 0x031B, 0x0300], NFKC: [0x1EDD], NFKD: [0x006F, 0x031B, 0x0300] }, +{ source: [0x01A0, 0x0309], NFC: [0x1EDE], NFD: [0x004F, 0x031B, 0x0309], NFKC: [0x1EDE], NFKD: [0x004F, 0x031B, 0x0309] }, +{ source: [0x1ECE, 0x031B], NFC: [0x1EDE], NFD: [0x004F, 0x031B, 0x0309], NFKC: [0x1EDE], NFKD: [0x004F, 0x031B, 0x0309] }, +{ source: [0x01A1, 0x0309], NFC: [0x1EDF], NFD: [0x006F, 0x031B, 0x0309], NFKC: [0x1EDF], NFKD: [0x006F, 0x031B, 0x0309] }, +{ source: [0x1ECF, 0x031B], NFC: [0x1EDF], NFD: [0x006F, 0x031B, 0x0309], NFKC: [0x1EDF], NFKD: [0x006F, 0x031B, 0x0309] }, +{ source: [0x00D5, 0x031B], NFC: [0x1EE0], NFD: [0x004F, 0x031B, 0x0303], NFKC: [0x1EE0], NFKD: [0x004F, 0x031B, 0x0303] }, +{ source: [0x01A0, 0x0303], NFC: [0x1EE0], NFD: [0x004F, 0x031B, 0x0303], NFKC: [0x1EE0], NFKD: [0x004F, 0x031B, 0x0303] }, +{ source: [0x00F5, 0x031B], NFC: [0x1EE1], NFD: [0x006F, 0x031B, 0x0303], NFKC: [0x1EE1], NFKD: [0x006F, 0x031B, 0x0303] }, +{ source: [0x01A1, 0x0303], NFC: [0x1EE1], NFD: [0x006F, 0x031B, 0x0303], NFKC: [0x1EE1], NFKD: [0x006F, 0x031B, 0x0303] }, +{ source: [0x01A0, 0x0323], NFC: [0x1EE2], NFD: [0x004F, 0x031B, 0x0323], NFKC: [0x1EE2], NFKD: [0x004F, 0x031B, 0x0323] }, +{ source: [0x1ECC, 0x031B], NFC: [0x1EE2], NFD: [0x004F, 0x031B, 0x0323], NFKC: [0x1EE2], NFKD: [0x004F, 0x031B, 0x0323] }, +{ source: [0x01A1, 0x0323], NFC: [0x1EE3], NFD: [0x006F, 0x031B, 0x0323], NFKC: [0x1EE3], NFKD: [0x006F, 0x031B, 0x0323] }, +{ source: [0x1ECD, 0x031B], NFC: [0x1EE3], NFD: [0x006F, 0x031B, 0x0323], NFKC: [0x1EE3], NFKD: [0x006F, 0x031B, 0x0323] }, +{ source: [0x00DA, 0x031B], NFC: [0x1EE8], NFD: [0x0055, 0x031B, 0x0301], NFKC: [0x1EE8], NFKD: [0x0055, 0x031B, 0x0301] }, +{ source: [0x01AF, 0x0301], NFC: [0x1EE8], NFD: [0x0055, 0x031B, 0x0301], NFKC: [0x1EE8], NFKD: [0x0055, 0x031B, 0x0301] }, +{ source: [0x01AF, 0x0341], NFC: [0x1EE8], NFD: [0x0055, 0x031B, 0x0301], NFKC: [0x1EE8], NFKD: [0x0055, 0x031B, 0x0301] }, +{ source: [0x00FA, 0x031B], NFC: [0x1EE9], NFD: [0x0075, 0x031B, 0x0301], NFKC: [0x1EE9], NFKD: [0x0075, 0x031B, 0x0301] }, +{ source: [0x01B0, 0x0301], NFC: [0x1EE9], NFD: [0x0075, 0x031B, 0x0301], NFKC: [0x1EE9], NFKD: [0x0075, 0x031B, 0x0301] }, +{ source: [0x01B0, 0x0341], NFC: [0x1EE9], NFD: [0x0075, 0x031B, 0x0301], NFKC: [0x1EE9], NFKD: [0x0075, 0x031B, 0x0301] }, +{ source: [0x00D9, 0x031B], NFC: [0x1EEA], NFD: [0x0055, 0x031B, 0x0300], NFKC: [0x1EEA], NFKD: [0x0055, 0x031B, 0x0300] }, +{ source: [0x01AF, 0x0300], NFC: [0x1EEA], NFD: [0x0055, 0x031B, 0x0300], NFKC: [0x1EEA], NFKD: [0x0055, 0x031B, 0x0300] }, +{ source: [0x01AF, 0x0340], NFC: [0x1EEA], NFD: [0x0055, 0x031B, 0x0300], NFKC: [0x1EEA], NFKD: [0x0055, 0x031B, 0x0300] }, +{ source: [0x00F9, 0x031B], NFC: [0x1EEB], NFD: [0x0075, 0x031B, 0x0300], NFKC: [0x1EEB], NFKD: [0x0075, 0x031B, 0x0300] }, +{ source: [0x01B0, 0x0300], NFC: [0x1EEB], NFD: [0x0075, 0x031B, 0x0300], NFKC: [0x1EEB], NFKD: [0x0075, 0x031B, 0x0300] }, +{ source: [0x01B0, 0x0340], NFC: [0x1EEB], NFD: [0x0075, 0x031B, 0x0300], NFKC: [0x1EEB], NFKD: [0x0075, 0x031B, 0x0300] }, +{ source: [0x01AF, 0x0309], NFC: [0x1EEC], NFD: [0x0055, 0x031B, 0x0309], NFKC: [0x1EEC], NFKD: [0x0055, 0x031B, 0x0309] }, +{ source: [0x1EE6, 0x031B], NFC: [0x1EEC], NFD: [0x0055, 0x031B, 0x0309], NFKC: [0x1EEC], NFKD: [0x0055, 0x031B, 0x0309] }, +{ source: [0x01B0, 0x0309], NFC: [0x1EED], NFD: [0x0075, 0x031B, 0x0309], NFKC: [0x1EED], NFKD: [0x0075, 0x031B, 0x0309] }, +{ source: [0x1EE7, 0x031B], NFC: [0x1EED], NFD: [0x0075, 0x031B, 0x0309], NFKC: [0x1EED], NFKD: [0x0075, 0x031B, 0x0309] }, +{ source: [0x0168, 0x031B], NFC: [0x1EEE], NFD: [0x0055, 0x031B, 0x0303], NFKC: [0x1EEE], NFKD: [0x0055, 0x031B, 0x0303] }, +{ source: [0x01AF, 0x0303], NFC: [0x1EEE], NFD: [0x0055, 0x031B, 0x0303], NFKC: [0x1EEE], NFKD: [0x0055, 0x031B, 0x0303] }, +{ source: [0x0169, 0x031B], NFC: [0x1EEF], NFD: [0x0075, 0x031B, 0x0303], NFKC: [0x1EEF], NFKD: [0x0075, 0x031B, 0x0303] }, +{ source: [0x01B0, 0x0303], NFC: [0x1EEF], NFD: [0x0075, 0x031B, 0x0303], NFKC: [0x1EEF], NFKD: [0x0075, 0x031B, 0x0303] }, +{ source: [0x01AF, 0x0323], NFC: [0x1EF0], NFD: [0x0055, 0x031B, 0x0323], NFKC: [0x1EF0], NFKD: [0x0055, 0x031B, 0x0323] }, +{ source: [0x1EE4, 0x031B], NFC: [0x1EF0], NFD: [0x0055, 0x031B, 0x0323], NFKC: [0x1EF0], NFKD: [0x0055, 0x031B, 0x0323] }, +{ source: [0x01B0, 0x0323], NFC: [0x1EF1], NFD: [0x0075, 0x031B, 0x0323], NFKC: [0x1EF1], NFKD: [0x0075, 0x031B, 0x0323] }, +{ source: [0x1EE5, 0x031B], NFC: [0x1EF1], NFD: [0x0075, 0x031B, 0x0323], NFKC: [0x1EF1], NFKD: [0x0075, 0x031B, 0x0323] }, +{ source: [0x1F00, 0x0300], NFC: [0x1F02], NFD: [0x03B1, 0x0313, 0x0300], NFKC: [0x1F02], NFKD: [0x03B1, 0x0313, 0x0300] }, +{ source: [0x1F00, 0x0340], NFC: [0x1F02], NFD: [0x03B1, 0x0313, 0x0300], NFKC: [0x1F02], NFKD: [0x03B1, 0x0313, 0x0300] }, +{ source: [0x1F01, 0x0300], NFC: [0x1F03], NFD: [0x03B1, 0x0314, 0x0300], NFKC: [0x1F03], NFKD: [0x03B1, 0x0314, 0x0300] }, +{ source: [0x1F01, 0x0340], NFC: [0x1F03], NFD: [0x03B1, 0x0314, 0x0300], NFKC: [0x1F03], NFKD: [0x03B1, 0x0314, 0x0300] }, +{ source: [0x1F00, 0x0301], NFC: [0x1F04], NFD: [0x03B1, 0x0313, 0x0301], NFKC: [0x1F04], NFKD: [0x03B1, 0x0313, 0x0301] }, +{ source: [0x1F00, 0x0341], NFC: [0x1F04], NFD: [0x03B1, 0x0313, 0x0301], NFKC: [0x1F04], NFKD: [0x03B1, 0x0313, 0x0301] }, +{ source: [0x1F01, 0x0301], NFC: [0x1F05], NFD: [0x03B1, 0x0314, 0x0301], NFKC: [0x1F05], NFKD: [0x03B1, 0x0314, 0x0301] }, +{ source: [0x1F01, 0x0341], NFC: [0x1F05], NFD: [0x03B1, 0x0314, 0x0301], NFKC: [0x1F05], NFKD: [0x03B1, 0x0314, 0x0301] }, +{ source: [0x1F00, 0x0342], NFC: [0x1F06], NFD: [0x03B1, 0x0313, 0x0342], NFKC: [0x1F06], NFKD: [0x03B1, 0x0313, 0x0342] }, +{ source: [0x1F01, 0x0342], NFC: [0x1F07], NFD: [0x03B1, 0x0314, 0x0342], NFKC: [0x1F07], NFKD: [0x03B1, 0x0314, 0x0342] }, +{ source: [0x1F08, 0x0300], NFC: [0x1F0A], NFD: [0x0391, 0x0313, 0x0300], NFKC: [0x1F0A], NFKD: [0x0391, 0x0313, 0x0300] }, +{ source: [0x1F08, 0x0340], NFC: [0x1F0A], NFD: [0x0391, 0x0313, 0x0300], NFKC: [0x1F0A], NFKD: [0x0391, 0x0313, 0x0300] }, +{ source: [0x1F09, 0x0300], NFC: [0x1F0B], NFD: [0x0391, 0x0314, 0x0300], NFKC: [0x1F0B], NFKD: [0x0391, 0x0314, 0x0300] }, +{ source: [0x1F09, 0x0340], NFC: [0x1F0B], NFD: [0x0391, 0x0314, 0x0300], NFKC: [0x1F0B], NFKD: [0x0391, 0x0314, 0x0300] }, +{ source: [0x1F08, 0x0301], NFC: [0x1F0C], NFD: [0x0391, 0x0313, 0x0301], NFKC: [0x1F0C], NFKD: [0x0391, 0x0313, 0x0301] }, +{ source: [0x1F08, 0x0341], NFC: [0x1F0C], NFD: [0x0391, 0x0313, 0x0301], NFKC: [0x1F0C], NFKD: [0x0391, 0x0313, 0x0301] }, +{ source: [0x1F09, 0x0301], NFC: [0x1F0D], NFD: [0x0391, 0x0314, 0x0301], NFKC: [0x1F0D], NFKD: [0x0391, 0x0314, 0x0301] }, +{ source: [0x1F09, 0x0341], NFC: [0x1F0D], NFD: [0x0391, 0x0314, 0x0301], NFKC: [0x1F0D], NFKD: [0x0391, 0x0314, 0x0301] }, +{ source: [0x1F08, 0x0342], NFC: [0x1F0E], NFD: [0x0391, 0x0313, 0x0342], NFKC: [0x1F0E], NFKD: [0x0391, 0x0313, 0x0342] }, +{ source: [0x1F09, 0x0342], NFC: [0x1F0F], NFD: [0x0391, 0x0314, 0x0342], NFKC: [0x1F0F], NFKD: [0x0391, 0x0314, 0x0342] }, +{ source: [0x1F10, 0x0300], NFC: [0x1F12], NFD: [0x03B5, 0x0313, 0x0300], NFKC: [0x1F12], NFKD: [0x03B5, 0x0313, 0x0300] }, +{ source: [0x1F10, 0x0340], NFC: [0x1F12], NFD: [0x03B5, 0x0313, 0x0300], NFKC: [0x1F12], NFKD: [0x03B5, 0x0313, 0x0300] }, +{ source: [0x1F11, 0x0300], NFC: [0x1F13], NFD: [0x03B5, 0x0314, 0x0300], NFKC: [0x1F13], NFKD: [0x03B5, 0x0314, 0x0300] }, +{ source: [0x1F11, 0x0340], NFC: [0x1F13], NFD: [0x03B5, 0x0314, 0x0300], NFKC: [0x1F13], NFKD: [0x03B5, 0x0314, 0x0300] }, +{ source: [0x1F10, 0x0301], NFC: [0x1F14], NFD: [0x03B5, 0x0313, 0x0301], NFKC: [0x1F14], NFKD: [0x03B5, 0x0313, 0x0301] }, +{ source: [0x1F10, 0x0341], NFC: [0x1F14], NFD: [0x03B5, 0x0313, 0x0301], NFKC: [0x1F14], NFKD: [0x03B5, 0x0313, 0x0301] }, +{ source: [0x1F11, 0x0301], NFC: [0x1F15], NFD: [0x03B5, 0x0314, 0x0301], NFKC: [0x1F15], NFKD: [0x03B5, 0x0314, 0x0301] }, +{ source: [0x1F11, 0x0341], NFC: [0x1F15], NFD: [0x03B5, 0x0314, 0x0301], NFKC: [0x1F15], NFKD: [0x03B5, 0x0314, 0x0301] }, +{ source: [0x1F18, 0x0300], NFC: [0x1F1A], NFD: [0x0395, 0x0313, 0x0300], NFKC: [0x1F1A], NFKD: [0x0395, 0x0313, 0x0300] }, +{ source: [0x1F18, 0x0340], NFC: [0x1F1A], NFD: [0x0395, 0x0313, 0x0300], NFKC: [0x1F1A], NFKD: [0x0395, 0x0313, 0x0300] }, +{ source: [0x1F19, 0x0300], NFC: [0x1F1B], NFD: [0x0395, 0x0314, 0x0300], NFKC: [0x1F1B], NFKD: [0x0395, 0x0314, 0x0300] }, +{ source: [0x1F19, 0x0340], NFC: [0x1F1B], NFD: [0x0395, 0x0314, 0x0300], NFKC: [0x1F1B], NFKD: [0x0395, 0x0314, 0x0300] }, +{ source: [0x1F18, 0x0301], NFC: [0x1F1C], NFD: [0x0395, 0x0313, 0x0301], NFKC: [0x1F1C], NFKD: [0x0395, 0x0313, 0x0301] }, +{ source: [0x1F18, 0x0341], NFC: [0x1F1C], NFD: [0x0395, 0x0313, 0x0301], NFKC: [0x1F1C], NFKD: [0x0395, 0x0313, 0x0301] }, +{ source: [0x1F19, 0x0301], NFC: [0x1F1D], NFD: [0x0395, 0x0314, 0x0301], NFKC: [0x1F1D], NFKD: [0x0395, 0x0314, 0x0301] }, +{ source: [0x1F19, 0x0341], NFC: [0x1F1D], NFD: [0x0395, 0x0314, 0x0301], NFKC: [0x1F1D], NFKD: [0x0395, 0x0314, 0x0301] }, +{ source: [0x1F20, 0x0300], NFC: [0x1F22], NFD: [0x03B7, 0x0313, 0x0300], NFKC: [0x1F22], NFKD: [0x03B7, 0x0313, 0x0300] }, +{ source: [0x1F20, 0x0340], NFC: [0x1F22], NFD: [0x03B7, 0x0313, 0x0300], NFKC: [0x1F22], NFKD: [0x03B7, 0x0313, 0x0300] }, +{ source: [0x1F21, 0x0300], NFC: [0x1F23], NFD: [0x03B7, 0x0314, 0x0300], NFKC: [0x1F23], NFKD: [0x03B7, 0x0314, 0x0300] }, +{ source: [0x1F21, 0x0340], NFC: [0x1F23], NFD: [0x03B7, 0x0314, 0x0300], NFKC: [0x1F23], NFKD: [0x03B7, 0x0314, 0x0300] }, +{ source: [0x1F20, 0x0301], NFC: [0x1F24], NFD: [0x03B7, 0x0313, 0x0301], NFKC: [0x1F24], NFKD: [0x03B7, 0x0313, 0x0301] }, +{ source: [0x1F20, 0x0341], NFC: [0x1F24], NFD: [0x03B7, 0x0313, 0x0301], NFKC: [0x1F24], NFKD: [0x03B7, 0x0313, 0x0301] }, +{ source: [0x1F21, 0x0301], NFC: [0x1F25], NFD: [0x03B7, 0x0314, 0x0301], NFKC: [0x1F25], NFKD: [0x03B7, 0x0314, 0x0301] }, +{ source: [0x1F21, 0x0341], NFC: [0x1F25], NFD: [0x03B7, 0x0314, 0x0301], NFKC: [0x1F25], NFKD: [0x03B7, 0x0314, 0x0301] }, +{ source: [0x1F20, 0x0342], NFC: [0x1F26], NFD: [0x03B7, 0x0313, 0x0342], NFKC: [0x1F26], NFKD: [0x03B7, 0x0313, 0x0342] }, +{ source: [0x1F21, 0x0342], NFC: [0x1F27], NFD: [0x03B7, 0x0314, 0x0342], NFKC: [0x1F27], NFKD: [0x03B7, 0x0314, 0x0342] }, +{ source: [0x1F28, 0x0300], NFC: [0x1F2A], NFD: [0x0397, 0x0313, 0x0300], NFKC: [0x1F2A], NFKD: [0x0397, 0x0313, 0x0300] }, +{ source: [0x1F28, 0x0340], NFC: [0x1F2A], NFD: [0x0397, 0x0313, 0x0300], NFKC: [0x1F2A], NFKD: [0x0397, 0x0313, 0x0300] }, +{ source: [0x1F29, 0x0300], NFC: [0x1F2B], NFD: [0x0397, 0x0314, 0x0300], NFKC: [0x1F2B], NFKD: [0x0397, 0x0314, 0x0300] }, +{ source: [0x1F29, 0x0340], NFC: [0x1F2B], NFD: [0x0397, 0x0314, 0x0300], NFKC: [0x1F2B], NFKD: [0x0397, 0x0314, 0x0300] }, +{ source: [0x1F28, 0x0301], NFC: [0x1F2C], NFD: [0x0397, 0x0313, 0x0301], NFKC: [0x1F2C], NFKD: [0x0397, 0x0313, 0x0301] }, +{ source: [0x1F28, 0x0341], NFC: [0x1F2C], NFD: [0x0397, 0x0313, 0x0301], NFKC: [0x1F2C], NFKD: [0x0397, 0x0313, 0x0301] }, +{ source: [0x1F29, 0x0301], NFC: [0x1F2D], NFD: [0x0397, 0x0314, 0x0301], NFKC: [0x1F2D], NFKD: [0x0397, 0x0314, 0x0301] }, +{ source: [0x1F29, 0x0341], NFC: [0x1F2D], NFD: [0x0397, 0x0314, 0x0301], NFKC: [0x1F2D], NFKD: [0x0397, 0x0314, 0x0301] }, +{ source: [0x1F28, 0x0342], NFC: [0x1F2E], NFD: [0x0397, 0x0313, 0x0342], NFKC: [0x1F2E], NFKD: [0x0397, 0x0313, 0x0342] }, +{ source: [0x1F29, 0x0342], NFC: [0x1F2F], NFD: [0x0397, 0x0314, 0x0342], NFKC: [0x1F2F], NFKD: [0x0397, 0x0314, 0x0342] }, +{ source: [0x1F30, 0x0300], NFC: [0x1F32], NFD: [0x03B9, 0x0313, 0x0300], NFKC: [0x1F32], NFKD: [0x03B9, 0x0313, 0x0300] }, +{ source: [0x1F30, 0x0340], NFC: [0x1F32], NFD: [0x03B9, 0x0313, 0x0300], NFKC: [0x1F32], NFKD: [0x03B9, 0x0313, 0x0300] }, +{ source: [0x1F31, 0x0300], NFC: [0x1F33], NFD: [0x03B9, 0x0314, 0x0300], NFKC: [0x1F33], NFKD: [0x03B9, 0x0314, 0x0300] }, +{ source: [0x1F31, 0x0340], NFC: [0x1F33], NFD: [0x03B9, 0x0314, 0x0300], NFKC: [0x1F33], NFKD: [0x03B9, 0x0314, 0x0300] }, +{ source: [0x1F30, 0x0301], NFC: [0x1F34], NFD: [0x03B9, 0x0313, 0x0301], NFKC: [0x1F34], NFKD: [0x03B9, 0x0313, 0x0301] }, +{ source: [0x1F30, 0x0341], NFC: [0x1F34], NFD: [0x03B9, 0x0313, 0x0301], NFKC: [0x1F34], NFKD: [0x03B9, 0x0313, 0x0301] }, +{ source: [0x1F31, 0x0301], NFC: [0x1F35], NFD: [0x03B9, 0x0314, 0x0301], NFKC: [0x1F35], NFKD: [0x03B9, 0x0314, 0x0301] }, +{ source: [0x1F31, 0x0341], NFC: [0x1F35], NFD: [0x03B9, 0x0314, 0x0301], NFKC: [0x1F35], NFKD: [0x03B9, 0x0314, 0x0301] }, +{ source: [0x1F30, 0x0342], NFC: [0x1F36], NFD: [0x03B9, 0x0313, 0x0342], NFKC: [0x1F36], NFKD: [0x03B9, 0x0313, 0x0342] }, +{ source: [0x1F31, 0x0342], NFC: [0x1F37], NFD: [0x03B9, 0x0314, 0x0342], NFKC: [0x1F37], NFKD: [0x03B9, 0x0314, 0x0342] }, +{ source: [0x1F38, 0x0300], NFC: [0x1F3A], NFD: [0x0399, 0x0313, 0x0300], NFKC: [0x1F3A], NFKD: [0x0399, 0x0313, 0x0300] }, +{ source: [0x1F38, 0x0340], NFC: [0x1F3A], NFD: [0x0399, 0x0313, 0x0300], NFKC: [0x1F3A], NFKD: [0x0399, 0x0313, 0x0300] }, +{ source: [0x1F39, 0x0300], NFC: [0x1F3B], NFD: [0x0399, 0x0314, 0x0300], NFKC: [0x1F3B], NFKD: [0x0399, 0x0314, 0x0300] }, +{ source: [0x1F39, 0x0340], NFC: [0x1F3B], NFD: [0x0399, 0x0314, 0x0300], NFKC: [0x1F3B], NFKD: [0x0399, 0x0314, 0x0300] }, +{ source: [0x1F38, 0x0301], NFC: [0x1F3C], NFD: [0x0399, 0x0313, 0x0301], NFKC: [0x1F3C], NFKD: [0x0399, 0x0313, 0x0301] }, +{ source: [0x1F38, 0x0341], NFC: [0x1F3C], NFD: [0x0399, 0x0313, 0x0301], NFKC: [0x1F3C], NFKD: [0x0399, 0x0313, 0x0301] }, +{ source: [0x1F39, 0x0301], NFC: [0x1F3D], NFD: [0x0399, 0x0314, 0x0301], NFKC: [0x1F3D], NFKD: [0x0399, 0x0314, 0x0301] }, +{ source: [0x1F39, 0x0341], NFC: [0x1F3D], NFD: [0x0399, 0x0314, 0x0301], NFKC: [0x1F3D], NFKD: [0x0399, 0x0314, 0x0301] }, +{ source: [0x1F38, 0x0342], NFC: [0x1F3E], NFD: [0x0399, 0x0313, 0x0342], NFKC: [0x1F3E], NFKD: [0x0399, 0x0313, 0x0342] }, +{ source: [0x1F39, 0x0342], NFC: [0x1F3F], NFD: [0x0399, 0x0314, 0x0342], NFKC: [0x1F3F], NFKD: [0x0399, 0x0314, 0x0342] }, +{ source: [0x1F40, 0x0300], NFC: [0x1F42], NFD: [0x03BF, 0x0313, 0x0300], NFKC: [0x1F42], NFKD: [0x03BF, 0x0313, 0x0300] }, +{ source: [0x1F40, 0x0340], NFC: [0x1F42], NFD: [0x03BF, 0x0313, 0x0300], NFKC: [0x1F42], NFKD: [0x03BF, 0x0313, 0x0300] }, +{ source: [0x1F41, 0x0300], NFC: [0x1F43], NFD: [0x03BF, 0x0314, 0x0300], NFKC: [0x1F43], NFKD: [0x03BF, 0x0314, 0x0300] }, +{ source: [0x1F41, 0x0340], NFC: [0x1F43], NFD: [0x03BF, 0x0314, 0x0300], NFKC: [0x1F43], NFKD: [0x03BF, 0x0314, 0x0300] }, +{ source: [0x1F40, 0x0301], NFC: [0x1F44], NFD: [0x03BF, 0x0313, 0x0301], NFKC: [0x1F44], NFKD: [0x03BF, 0x0313, 0x0301] }, +{ source: [0x1F40, 0x0341], NFC: [0x1F44], NFD: [0x03BF, 0x0313, 0x0301], NFKC: [0x1F44], NFKD: [0x03BF, 0x0313, 0x0301] }, +{ source: [0x1F41, 0x0301], NFC: [0x1F45], NFD: [0x03BF, 0x0314, 0x0301], NFKC: [0x1F45], NFKD: [0x03BF, 0x0314, 0x0301] }, +{ source: [0x1F41, 0x0341], NFC: [0x1F45], NFD: [0x03BF, 0x0314, 0x0301], NFKC: [0x1F45], NFKD: [0x03BF, 0x0314, 0x0301] }, +{ source: [0x1F48, 0x0300], NFC: [0x1F4A], NFD: [0x039F, 0x0313, 0x0300], NFKC: [0x1F4A], NFKD: [0x039F, 0x0313, 0x0300] }, +{ source: [0x1F48, 0x0340], NFC: [0x1F4A], NFD: [0x039F, 0x0313, 0x0300], NFKC: [0x1F4A], NFKD: [0x039F, 0x0313, 0x0300] }, +{ source: [0x1F49, 0x0300], NFC: [0x1F4B], NFD: [0x039F, 0x0314, 0x0300], NFKC: [0x1F4B], NFKD: [0x039F, 0x0314, 0x0300] }, +{ source: [0x1F49, 0x0340], NFC: [0x1F4B], NFD: [0x039F, 0x0314, 0x0300], NFKC: [0x1F4B], NFKD: [0x039F, 0x0314, 0x0300] }, +{ source: [0x1F48, 0x0301], NFC: [0x1F4C], NFD: [0x039F, 0x0313, 0x0301], NFKC: [0x1F4C], NFKD: [0x039F, 0x0313, 0x0301] }, +{ source: [0x1F48, 0x0341], NFC: [0x1F4C], NFD: [0x039F, 0x0313, 0x0301], NFKC: [0x1F4C], NFKD: [0x039F, 0x0313, 0x0301] }, +{ source: [0x1F49, 0x0301], NFC: [0x1F4D], NFD: [0x039F, 0x0314, 0x0301], NFKC: [0x1F4D], NFKD: [0x039F, 0x0314, 0x0301] }, +{ source: [0x1F49, 0x0341], NFC: [0x1F4D], NFD: [0x039F, 0x0314, 0x0301], NFKC: [0x1F4D], NFKD: [0x039F, 0x0314, 0x0301] }, +{ source: [0x1F50, 0x0300], NFC: [0x1F52], NFD: [0x03C5, 0x0313, 0x0300], NFKC: [0x1F52], NFKD: [0x03C5, 0x0313, 0x0300] }, +{ source: [0x1F50, 0x0340], NFC: [0x1F52], NFD: [0x03C5, 0x0313, 0x0300], NFKC: [0x1F52], NFKD: [0x03C5, 0x0313, 0x0300] }, +{ source: [0x1F51, 0x0300], NFC: [0x1F53], NFD: [0x03C5, 0x0314, 0x0300], NFKC: [0x1F53], NFKD: [0x03C5, 0x0314, 0x0300] }, +{ source: [0x1F51, 0x0340], NFC: [0x1F53], NFD: [0x03C5, 0x0314, 0x0300], NFKC: [0x1F53], NFKD: [0x03C5, 0x0314, 0x0300] }, +{ source: [0x1F50, 0x0301], NFC: [0x1F54], NFD: [0x03C5, 0x0313, 0x0301], NFKC: [0x1F54], NFKD: [0x03C5, 0x0313, 0x0301] }, +{ source: [0x1F50, 0x0341], NFC: [0x1F54], NFD: [0x03C5, 0x0313, 0x0301], NFKC: [0x1F54], NFKD: [0x03C5, 0x0313, 0x0301] }, +{ source: [0x1F51, 0x0301], NFC: [0x1F55], NFD: [0x03C5, 0x0314, 0x0301], NFKC: [0x1F55], NFKD: [0x03C5, 0x0314, 0x0301] }, +{ source: [0x1F51, 0x0341], NFC: [0x1F55], NFD: [0x03C5, 0x0314, 0x0301], NFKC: [0x1F55], NFKD: [0x03C5, 0x0314, 0x0301] }, +{ source: [0x1F50, 0x0342], NFC: [0x1F56], NFD: [0x03C5, 0x0313, 0x0342], NFKC: [0x1F56], NFKD: [0x03C5, 0x0313, 0x0342] }, +{ source: [0x1F51, 0x0342], NFC: [0x1F57], NFD: [0x03C5, 0x0314, 0x0342], NFKC: [0x1F57], NFKD: [0x03C5, 0x0314, 0x0342] }, +{ source: [0x1F59, 0x0300], NFC: [0x1F5B], NFD: [0x03A5, 0x0314, 0x0300], NFKC: [0x1F5B], NFKD: [0x03A5, 0x0314, 0x0300] }, +{ source: [0x1F59, 0x0340], NFC: [0x1F5B], NFD: [0x03A5, 0x0314, 0x0300], NFKC: [0x1F5B], NFKD: [0x03A5, 0x0314, 0x0300] }, +{ source: [0x1F59, 0x0301], NFC: [0x1F5D], NFD: [0x03A5, 0x0314, 0x0301], NFKC: [0x1F5D], NFKD: [0x03A5, 0x0314, 0x0301] }, +{ source: [0x1F59, 0x0341], NFC: [0x1F5D], NFD: [0x03A5, 0x0314, 0x0301], NFKC: [0x1F5D], NFKD: [0x03A5, 0x0314, 0x0301] }, +{ source: [0x1F59, 0x0342], NFC: [0x1F5F], NFD: [0x03A5, 0x0314, 0x0342], NFKC: [0x1F5F], NFKD: [0x03A5, 0x0314, 0x0342] }, +{ source: [0x1F60, 0x0300], NFC: [0x1F62], NFD: [0x03C9, 0x0313, 0x0300], NFKC: [0x1F62], NFKD: [0x03C9, 0x0313, 0x0300] }, +{ source: [0x1F60, 0x0340], NFC: [0x1F62], NFD: [0x03C9, 0x0313, 0x0300], NFKC: [0x1F62], NFKD: [0x03C9, 0x0313, 0x0300] }, +{ source: [0x1F61, 0x0300], NFC: [0x1F63], NFD: [0x03C9, 0x0314, 0x0300], NFKC: [0x1F63], NFKD: [0x03C9, 0x0314, 0x0300] }, +{ source: [0x1F61, 0x0340], NFC: [0x1F63], NFD: [0x03C9, 0x0314, 0x0300], NFKC: [0x1F63], NFKD: [0x03C9, 0x0314, 0x0300] }, +{ source: [0x1F60, 0x0301], NFC: [0x1F64], NFD: [0x03C9, 0x0313, 0x0301], NFKC: [0x1F64], NFKD: [0x03C9, 0x0313, 0x0301] }, +{ source: [0x1F60, 0x0341], NFC: [0x1F64], NFD: [0x03C9, 0x0313, 0x0301], NFKC: [0x1F64], NFKD: [0x03C9, 0x0313, 0x0301] }, +{ source: [0x1F61, 0x0301], NFC: [0x1F65], NFD: [0x03C9, 0x0314, 0x0301], NFKC: [0x1F65], NFKD: [0x03C9, 0x0314, 0x0301] }, +{ source: [0x1F61, 0x0341], NFC: [0x1F65], NFD: [0x03C9, 0x0314, 0x0301], NFKC: [0x1F65], NFKD: [0x03C9, 0x0314, 0x0301] }, +{ source: [0x1F60, 0x0342], NFC: [0x1F66], NFD: [0x03C9, 0x0313, 0x0342], NFKC: [0x1F66], NFKD: [0x03C9, 0x0313, 0x0342] }, +{ source: [0x1F61, 0x0342], NFC: [0x1F67], NFD: [0x03C9, 0x0314, 0x0342], NFKC: [0x1F67], NFKD: [0x03C9, 0x0314, 0x0342] }, +{ source: [0x1F68, 0x0300], NFC: [0x1F6A], NFD: [0x03A9, 0x0313, 0x0300], NFKC: [0x1F6A], NFKD: [0x03A9, 0x0313, 0x0300] }, +{ source: [0x1F68, 0x0340], NFC: [0x1F6A], NFD: [0x03A9, 0x0313, 0x0300], NFKC: [0x1F6A], NFKD: [0x03A9, 0x0313, 0x0300] }, +{ source: [0x1F69, 0x0300], NFC: [0x1F6B], NFD: [0x03A9, 0x0314, 0x0300], NFKC: [0x1F6B], NFKD: [0x03A9, 0x0314, 0x0300] }, +{ source: [0x1F69, 0x0340], NFC: [0x1F6B], NFD: [0x03A9, 0x0314, 0x0300], NFKC: [0x1F6B], NFKD: [0x03A9, 0x0314, 0x0300] }, +{ source: [0x1F68, 0x0301], NFC: [0x1F6C], NFD: [0x03A9, 0x0313, 0x0301], NFKC: [0x1F6C], NFKD: [0x03A9, 0x0313, 0x0301] }, +{ source: [0x1F68, 0x0341], NFC: [0x1F6C], NFD: [0x03A9, 0x0313, 0x0301], NFKC: [0x1F6C], NFKD: [0x03A9, 0x0313, 0x0301] }, +{ source: [0x1F69, 0x0301], NFC: [0x1F6D], NFD: [0x03A9, 0x0314, 0x0301], NFKC: [0x1F6D], NFKD: [0x03A9, 0x0314, 0x0301] }, +{ source: [0x1F69, 0x0341], NFC: [0x1F6D], NFD: [0x03A9, 0x0314, 0x0301], NFKC: [0x1F6D], NFKD: [0x03A9, 0x0314, 0x0301] }, +{ source: [0x1F68, 0x0342], NFC: [0x1F6E], NFD: [0x03A9, 0x0313, 0x0342], NFKC: [0x1F6E], NFKD: [0x03A9, 0x0313, 0x0342] }, +{ source: [0x1F69, 0x0342], NFC: [0x1F6F], NFD: [0x03A9, 0x0314, 0x0342], NFKC: [0x1F6F], NFKD: [0x03A9, 0x0314, 0x0342] }, +{ source: [0x1F00, 0x0345], NFC: [0x1F80], NFD: [0x03B1, 0x0313, 0x0345], NFKC: [0x1F80], NFKD: [0x03B1, 0x0313, 0x0345] }, +{ source: [0x1FB3, 0x0313], NFC: [0x1F80], NFD: [0x03B1, 0x0313, 0x0345], NFKC: [0x1F80], NFKD: [0x03B1, 0x0313, 0x0345] }, +{ source: [0x1FB3, 0x0343], NFC: [0x1F80], NFD: [0x03B1, 0x0313, 0x0345], NFKC: [0x1F80], NFKD: [0x03B1, 0x0313, 0x0345] }, +{ source: [0x1F01, 0x0345], NFC: [0x1F81], NFD: [0x03B1, 0x0314, 0x0345], NFKC: [0x1F81], NFKD: [0x03B1, 0x0314, 0x0345] }, +{ source: [0x1FB3, 0x0314], NFC: [0x1F81], NFD: [0x03B1, 0x0314, 0x0345], NFKC: [0x1F81], NFKD: [0x03B1, 0x0314, 0x0345] }, +{ source: [0x1F02, 0x0345], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F80, 0x0300], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F80, 0x0340], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F00, 0x0300, 0x0345], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F00, 0x0340, 0x0345], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F00, 0x0345, 0x0300], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F00, 0x0345, 0x0340], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0313, 0x0300], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0313, 0x0340], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0343, 0x0300], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0343, 0x0340], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F03, 0x0345], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F81, 0x0300], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F81, 0x0340], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F01, 0x0300, 0x0345], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F01, 0x0340, 0x0345], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F01, 0x0345, 0x0300], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F01, 0x0345, 0x0340], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0314, 0x0300], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0314, 0x0340], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F04, 0x0345], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F80, 0x0301], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F80, 0x0341], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F00, 0x0301, 0x0345], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F00, 0x0341, 0x0345], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F00, 0x0345, 0x0301], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F00, 0x0345, 0x0341], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0313, 0x0301], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0313, 0x0341], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0343, 0x0301], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0343, 0x0341], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F05, 0x0345], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F81, 0x0301], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F81, 0x0341], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F01, 0x0301, 0x0345], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F01, 0x0341, 0x0345], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F01, 0x0345, 0x0301], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F01, 0x0345, 0x0341], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0314, 0x0301], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0314, 0x0341], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F06, 0x0345], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F80, 0x0342], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F00, 0x0342, 0x0345], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F00, 0x0345, 0x0342], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FB3, 0x0313, 0x0342], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FB3, 0x0343, 0x0342], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F07, 0x0345], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F81, 0x0342], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F01, 0x0342, 0x0345], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F01, 0x0345, 0x0342], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FB3, 0x0314, 0x0342], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F08, 0x0345], NFC: [0x1F88], NFD: [0x0391, 0x0313, 0x0345], NFKC: [0x1F88], NFKD: [0x0391, 0x0313, 0x0345] }, +{ source: [0x1FBC, 0x0313], NFC: [0x1F88], NFD: [0x0391, 0x0313, 0x0345], NFKC: [0x1F88], NFKD: [0x0391, 0x0313, 0x0345] }, +{ source: [0x1FBC, 0x0343], NFC: [0x1F88], NFD: [0x0391, 0x0313, 0x0345], NFKC: [0x1F88], NFKD: [0x0391, 0x0313, 0x0345] }, +{ source: [0x1F09, 0x0345], NFC: [0x1F89], NFD: [0x0391, 0x0314, 0x0345], NFKC: [0x1F89], NFKD: [0x0391, 0x0314, 0x0345] }, +{ source: [0x1FBC, 0x0314], NFC: [0x1F89], NFD: [0x0391, 0x0314, 0x0345], NFKC: [0x1F89], NFKD: [0x0391, 0x0314, 0x0345] }, +{ source: [0x1F0A, 0x0345], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F88, 0x0300], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F88, 0x0340], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F08, 0x0300, 0x0345], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F08, 0x0340, 0x0345], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F08, 0x0345, 0x0300], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F08, 0x0345, 0x0340], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FBC, 0x0313, 0x0300], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FBC, 0x0313, 0x0340], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FBC, 0x0343, 0x0300], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FBC, 0x0343, 0x0340], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F0B, 0x0345], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F89, 0x0300], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F89, 0x0340], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F09, 0x0300, 0x0345], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F09, 0x0340, 0x0345], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F09, 0x0345, 0x0300], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F09, 0x0345, 0x0340], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FBC, 0x0314, 0x0300], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FBC, 0x0314, 0x0340], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F0C, 0x0345], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F88, 0x0301], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F88, 0x0341], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F08, 0x0301, 0x0345], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F08, 0x0341, 0x0345], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F08, 0x0345, 0x0301], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F08, 0x0345, 0x0341], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FBC, 0x0313, 0x0301], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FBC, 0x0313, 0x0341], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FBC, 0x0343, 0x0301], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FBC, 0x0343, 0x0341], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F0D, 0x0345], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F89, 0x0301], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F89, 0x0341], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F09, 0x0301, 0x0345], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F09, 0x0341, 0x0345], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F09, 0x0345, 0x0301], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F09, 0x0345, 0x0341], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FBC, 0x0314, 0x0301], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FBC, 0x0314, 0x0341], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F0E, 0x0345], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F88, 0x0342], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F08, 0x0342, 0x0345], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F08, 0x0345, 0x0342], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FBC, 0x0313, 0x0342], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FBC, 0x0343, 0x0342], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F0F, 0x0345], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F89, 0x0342], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F09, 0x0342, 0x0345], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F09, 0x0345, 0x0342], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FBC, 0x0314, 0x0342], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F20, 0x0345], NFC: [0x1F90], NFD: [0x03B7, 0x0313, 0x0345], NFKC: [0x1F90], NFKD: [0x03B7, 0x0313, 0x0345] }, +{ source: [0x1FC3, 0x0313], NFC: [0x1F90], NFD: [0x03B7, 0x0313, 0x0345], NFKC: [0x1F90], NFKD: [0x03B7, 0x0313, 0x0345] }, +{ source: [0x1FC3, 0x0343], NFC: [0x1F90], NFD: [0x03B7, 0x0313, 0x0345], NFKC: [0x1F90], NFKD: [0x03B7, 0x0313, 0x0345] }, +{ source: [0x1F21, 0x0345], NFC: [0x1F91], NFD: [0x03B7, 0x0314, 0x0345], NFKC: [0x1F91], NFKD: [0x03B7, 0x0314, 0x0345] }, +{ source: [0x1FC3, 0x0314], NFC: [0x1F91], NFD: [0x03B7, 0x0314, 0x0345], NFKC: [0x1F91], NFKD: [0x03B7, 0x0314, 0x0345] }, +{ source: [0x1F22, 0x0345], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F90, 0x0300], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F90, 0x0340], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F20, 0x0300, 0x0345], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F20, 0x0340, 0x0345], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F20, 0x0345, 0x0300], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F20, 0x0345, 0x0340], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0313, 0x0300], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0313, 0x0340], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0343, 0x0300], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0343, 0x0340], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F23, 0x0345], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F91, 0x0300], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F91, 0x0340], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F21, 0x0300, 0x0345], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F21, 0x0340, 0x0345], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F21, 0x0345, 0x0300], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F21, 0x0345, 0x0340], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0314, 0x0300], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0314, 0x0340], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F24, 0x0345], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F90, 0x0301], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F90, 0x0341], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F20, 0x0301, 0x0345], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F20, 0x0341, 0x0345], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F20, 0x0345, 0x0301], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F20, 0x0345, 0x0341], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0313, 0x0301], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0313, 0x0341], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0343, 0x0301], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0343, 0x0341], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F25, 0x0345], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F91, 0x0301], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F91, 0x0341], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F21, 0x0301, 0x0345], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F21, 0x0341, 0x0345], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F21, 0x0345, 0x0301], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F21, 0x0345, 0x0341], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0314, 0x0301], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0314, 0x0341], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F26, 0x0345], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F90, 0x0342], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F20, 0x0342, 0x0345], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F20, 0x0345, 0x0342], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FC3, 0x0313, 0x0342], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FC3, 0x0343, 0x0342], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F27, 0x0345], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F91, 0x0342], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F21, 0x0342, 0x0345], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F21, 0x0345, 0x0342], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FC3, 0x0314, 0x0342], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F28, 0x0345], NFC: [0x1F98], NFD: [0x0397, 0x0313, 0x0345], NFKC: [0x1F98], NFKD: [0x0397, 0x0313, 0x0345] }, +{ source: [0x1FCC, 0x0313], NFC: [0x1F98], NFD: [0x0397, 0x0313, 0x0345], NFKC: [0x1F98], NFKD: [0x0397, 0x0313, 0x0345] }, +{ source: [0x1FCC, 0x0343], NFC: [0x1F98], NFD: [0x0397, 0x0313, 0x0345], NFKC: [0x1F98], NFKD: [0x0397, 0x0313, 0x0345] }, +{ source: [0x1F29, 0x0345], NFC: [0x1F99], NFD: [0x0397, 0x0314, 0x0345], NFKC: [0x1F99], NFKD: [0x0397, 0x0314, 0x0345] }, +{ source: [0x1FCC, 0x0314], NFC: [0x1F99], NFD: [0x0397, 0x0314, 0x0345], NFKC: [0x1F99], NFKD: [0x0397, 0x0314, 0x0345] }, +{ source: [0x1F2A, 0x0345], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F98, 0x0300], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F98, 0x0340], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F28, 0x0300, 0x0345], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F28, 0x0340, 0x0345], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F28, 0x0345, 0x0300], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F28, 0x0345, 0x0340], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FCC, 0x0313, 0x0300], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FCC, 0x0313, 0x0340], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FCC, 0x0343, 0x0300], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FCC, 0x0343, 0x0340], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F2B, 0x0345], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F99, 0x0300], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F99, 0x0340], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F29, 0x0300, 0x0345], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F29, 0x0340, 0x0345], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F29, 0x0345, 0x0300], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F29, 0x0345, 0x0340], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FCC, 0x0314, 0x0300], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FCC, 0x0314, 0x0340], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F2C, 0x0345], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F98, 0x0301], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F98, 0x0341], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F28, 0x0301, 0x0345], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F28, 0x0341, 0x0345], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F28, 0x0345, 0x0301], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F28, 0x0345, 0x0341], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FCC, 0x0313, 0x0301], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FCC, 0x0313, 0x0341], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FCC, 0x0343, 0x0301], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FCC, 0x0343, 0x0341], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F2D, 0x0345], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F99, 0x0301], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F99, 0x0341], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F29, 0x0301, 0x0345], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F29, 0x0341, 0x0345], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F29, 0x0345, 0x0301], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F29, 0x0345, 0x0341], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FCC, 0x0314, 0x0301], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FCC, 0x0314, 0x0341], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F2E, 0x0345], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F98, 0x0342], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F28, 0x0342, 0x0345], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F28, 0x0345, 0x0342], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FCC, 0x0313, 0x0342], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FCC, 0x0343, 0x0342], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F2F, 0x0345], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F99, 0x0342], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F29, 0x0342, 0x0345], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F29, 0x0345, 0x0342], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FCC, 0x0314, 0x0342], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F60, 0x0345], NFC: [0x1FA0], NFD: [0x03C9, 0x0313, 0x0345], NFKC: [0x1FA0], NFKD: [0x03C9, 0x0313, 0x0345] }, +{ source: [0x1FF3, 0x0313], NFC: [0x1FA0], NFD: [0x03C9, 0x0313, 0x0345], NFKC: [0x1FA0], NFKD: [0x03C9, 0x0313, 0x0345] }, +{ source: [0x1FF3, 0x0343], NFC: [0x1FA0], NFD: [0x03C9, 0x0313, 0x0345], NFKC: [0x1FA0], NFKD: [0x03C9, 0x0313, 0x0345] }, +{ source: [0x1F61, 0x0345], NFC: [0x1FA1], NFD: [0x03C9, 0x0314, 0x0345], NFKC: [0x1FA1], NFKD: [0x03C9, 0x0314, 0x0345] }, +{ source: [0x1FF3, 0x0314], NFC: [0x1FA1], NFD: [0x03C9, 0x0314, 0x0345], NFKC: [0x1FA1], NFKD: [0x03C9, 0x0314, 0x0345] }, +{ source: [0x1F62, 0x0345], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FA0, 0x0300], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FA0, 0x0340], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F60, 0x0300, 0x0345], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F60, 0x0340, 0x0345], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F60, 0x0345, 0x0300], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F60, 0x0345, 0x0340], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0313, 0x0300], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0313, 0x0340], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0343, 0x0300], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0343, 0x0340], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F63, 0x0345], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FA1, 0x0300], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FA1, 0x0340], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F61, 0x0300, 0x0345], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F61, 0x0340, 0x0345], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F61, 0x0345, 0x0300], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F61, 0x0345, 0x0340], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0314, 0x0300], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0314, 0x0340], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F64, 0x0345], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FA0, 0x0301], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FA0, 0x0341], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F60, 0x0301, 0x0345], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F60, 0x0341, 0x0345], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F60, 0x0345, 0x0301], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F60, 0x0345, 0x0341], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0313, 0x0301], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0313, 0x0341], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0343, 0x0301], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0343, 0x0341], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F65, 0x0345], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FA1, 0x0301], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FA1, 0x0341], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F61, 0x0301, 0x0345], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F61, 0x0341, 0x0345], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F61, 0x0345, 0x0301], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F61, 0x0345, 0x0341], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0314, 0x0301], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0314, 0x0341], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F66, 0x0345], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FA0, 0x0342], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F60, 0x0342, 0x0345], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F60, 0x0345, 0x0342], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FF3, 0x0313, 0x0342], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FF3, 0x0343, 0x0342], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F67, 0x0345], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FA1, 0x0342], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F61, 0x0342, 0x0345], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F61, 0x0345, 0x0342], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FF3, 0x0314, 0x0342], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F68, 0x0345], NFC: [0x1FA8], NFD: [0x03A9, 0x0313, 0x0345], NFKC: [0x1FA8], NFKD: [0x03A9, 0x0313, 0x0345] }, +{ source: [0x1FFC, 0x0313], NFC: [0x1FA8], NFD: [0x03A9, 0x0313, 0x0345], NFKC: [0x1FA8], NFKD: [0x03A9, 0x0313, 0x0345] }, +{ source: [0x1FFC, 0x0343], NFC: [0x1FA8], NFD: [0x03A9, 0x0313, 0x0345], NFKC: [0x1FA8], NFKD: [0x03A9, 0x0313, 0x0345] }, +{ source: [0x1F69, 0x0345], NFC: [0x1FA9], NFD: [0x03A9, 0x0314, 0x0345], NFKC: [0x1FA9], NFKD: [0x03A9, 0x0314, 0x0345] }, +{ source: [0x1FFC, 0x0314], NFC: [0x1FA9], NFD: [0x03A9, 0x0314, 0x0345], NFKC: [0x1FA9], NFKD: [0x03A9, 0x0314, 0x0345] }, +{ source: [0x1F6A, 0x0345], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FA8, 0x0300], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FA8, 0x0340], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F68, 0x0300, 0x0345], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F68, 0x0340, 0x0345], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F68, 0x0345, 0x0300], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F68, 0x0345, 0x0340], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FFC, 0x0313, 0x0300], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FFC, 0x0313, 0x0340], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FFC, 0x0343, 0x0300], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FFC, 0x0343, 0x0340], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F6B, 0x0345], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FA9, 0x0300], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FA9, 0x0340], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F69, 0x0300, 0x0345], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F69, 0x0340, 0x0345], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F69, 0x0345, 0x0300], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F69, 0x0345, 0x0340], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FFC, 0x0314, 0x0300], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FFC, 0x0314, 0x0340], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F6C, 0x0345], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FA8, 0x0301], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FA8, 0x0341], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F68, 0x0301, 0x0345], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F68, 0x0341, 0x0345], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F68, 0x0345, 0x0301], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F68, 0x0345, 0x0341], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FFC, 0x0313, 0x0301], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FFC, 0x0313, 0x0341], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FFC, 0x0343, 0x0301], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FFC, 0x0343, 0x0341], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F6D, 0x0345], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FA9, 0x0301], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FA9, 0x0341], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F69, 0x0301, 0x0345], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F69, 0x0341, 0x0345], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F69, 0x0345, 0x0301], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F69, 0x0345, 0x0341], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FFC, 0x0314, 0x0301], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FFC, 0x0314, 0x0341], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F6E, 0x0345], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FA8, 0x0342], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F68, 0x0342, 0x0345], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F68, 0x0345, 0x0342], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FFC, 0x0313, 0x0342], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FFC, 0x0343, 0x0342], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F6F, 0x0345], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FA9, 0x0342], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F69, 0x0342, 0x0345], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F69, 0x0345, 0x0342], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FFC, 0x0314, 0x0342], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F70, 0x0345], NFC: [0x1FB2], NFD: [0x03B1, 0x0300, 0x0345], NFKC: [0x1FB2], NFKD: [0x03B1, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0300], NFC: [0x1FB2], NFD: [0x03B1, 0x0300, 0x0345], NFKC: [0x1FB2], NFKD: [0x03B1, 0x0300, 0x0345] }, +{ source: [0x1FB3, 0x0340], NFC: [0x1FB2], NFD: [0x03B1, 0x0300, 0x0345], NFKC: [0x1FB2], NFKD: [0x03B1, 0x0300, 0x0345] }, +{ source: [0x03AC, 0x0345], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] }, +{ source: [0x1F71, 0x0345], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0301], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0341], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] }, +{ source: [0x1FB3, 0x0342], NFC: [0x1FB7], NFD: [0x03B1, 0x0342, 0x0345], NFKC: [0x1FB7], NFKD: [0x03B1, 0x0342, 0x0345] }, +{ source: [0x1FB6, 0x0345], NFC: [0x1FB7], NFD: [0x03B1, 0x0342, 0x0345], NFKC: [0x1FB7], NFKD: [0x03B1, 0x0342, 0x0345] }, +{ source: [0x1F74, 0x0345], NFC: [0x1FC2], NFD: [0x03B7, 0x0300, 0x0345], NFKC: [0x1FC2], NFKD: [0x03B7, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0300], NFC: [0x1FC2], NFD: [0x03B7, 0x0300, 0x0345], NFKC: [0x1FC2], NFKD: [0x03B7, 0x0300, 0x0345] }, +{ source: [0x1FC3, 0x0340], NFC: [0x1FC2], NFD: [0x03B7, 0x0300, 0x0345], NFKC: [0x1FC2], NFKD: [0x03B7, 0x0300, 0x0345] }, +{ source: [0x03AE, 0x0345], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] }, +{ source: [0x1F75, 0x0345], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0301], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0341], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] }, +{ source: [0x1FC3, 0x0342], NFC: [0x1FC7], NFD: [0x03B7, 0x0342, 0x0345], NFKC: [0x1FC7], NFKD: [0x03B7, 0x0342, 0x0345] }, +{ source: [0x1FC6, 0x0345], NFC: [0x1FC7], NFD: [0x03B7, 0x0342, 0x0345], NFKC: [0x1FC7], NFKD: [0x03B7, 0x0342, 0x0345] }, +{ source: [0x03CA, 0x0300], NFC: [0x1FD2], NFD: [0x03B9, 0x0308, 0x0300], NFKC: [0x1FD2], NFKD: [0x03B9, 0x0308, 0x0300] }, +{ source: [0x03CA, 0x0340], NFC: [0x1FD2], NFD: [0x03B9, 0x0308, 0x0300], NFKC: [0x1FD2], NFKD: [0x03B9, 0x0308, 0x0300] }, +{ source: [0x03B9, 0x0344], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03CA, 0x0301], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03CA, 0x0341], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x1FBE, 0x0344], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03CA, 0x0342], NFC: [0x1FD7], NFD: [0x03B9, 0x0308, 0x0342], NFKC: [0x1FD7], NFKD: [0x03B9, 0x0308, 0x0342] }, +{ source: [0x03CB, 0x0300], NFC: [0x1FE2], NFD: [0x03C5, 0x0308, 0x0300], NFKC: [0x1FE2], NFKD: [0x03C5, 0x0308, 0x0300] }, +{ source: [0x03CB, 0x0340], NFC: [0x1FE2], NFD: [0x03C5, 0x0308, 0x0300], NFKC: [0x1FE2], NFKD: [0x03C5, 0x0308, 0x0300] }, +{ source: [0x03C5, 0x0344], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CB, 0x0301], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CB, 0x0341], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CB, 0x0342], NFC: [0x1FE7], NFD: [0x03C5, 0x0308, 0x0342], NFKC: [0x1FE7], NFKD: [0x03C5, 0x0308, 0x0342] }, +{ source: [0x1F7C, 0x0345], NFC: [0x1FF2], NFD: [0x03C9, 0x0300, 0x0345], NFKC: [0x1FF2], NFKD: [0x03C9, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0300], NFC: [0x1FF2], NFD: [0x03C9, 0x0300, 0x0345], NFKC: [0x1FF2], NFKD: [0x03C9, 0x0300, 0x0345] }, +{ source: [0x1FF3, 0x0340], NFC: [0x1FF2], NFD: [0x03C9, 0x0300, 0x0345], NFKC: [0x1FF2], NFKD: [0x03C9, 0x0300, 0x0345] }, +{ source: [0x03CE, 0x0345], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] }, +{ source: [0x1F7D, 0x0345], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0301], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0341], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] }, +{ source: [0x1FF3, 0x0342], NFC: [0x1FF7], NFD: [0x03C9, 0x0342, 0x0345], NFKC: [0x1FF7], NFKD: [0x03C9, 0x0342, 0x0345] }, +{ source: [0x1FF6, 0x0345], NFC: [0x1FF7], NFD: [0x03C9, 0x0342, 0x0345], NFKC: [0x1FF7], NFKD: [0x03C9, 0x0342, 0x0345] }, +{ source: [0xFB2A, 0x05BC], NFC: [0x05E9, 0x05BC, 0x05C1], NFD: [0x05E9, 0x05BC, 0x05C1], NFKC: [0x05E9, 0x05BC, 0x05C1], NFKD: [0x05E9, 0x05BC, 0x05C1] }, +{ source: [0xFB49, 0x05C1], NFC: [0x05E9, 0x05BC, 0x05C1], NFD: [0x05E9, 0x05BC, 0x05C1], NFKC: [0x05E9, 0x05BC, 0x05C1], NFKD: [0x05E9, 0x05BC, 0x05C1] }, +{ source: [0xFB2B, 0x05BC], NFC: [0x05E9, 0x05BC, 0x05C2], NFD: [0x05E9, 0x05BC, 0x05C2], NFKC: [0x05E9, 0x05BC, 0x05C2], NFKD: [0x05E9, 0x05BC, 0x05C2] }, +{ source: [0xFB49, 0x05C2], NFC: [0x05E9, 0x05BC, 0x05C2], NFD: [0x05E9, 0x05BC, 0x05C2], NFKC: [0x05E9, 0x05BC, 0x05C2], NFKD: [0x05E9, 0x05BC, 0x05C2] }, +{ source: [0x1611E, 0x16123], NFC: [0x16126], NFD: [0x1611E, 0x1611E, 0x1611F], NFKC: [0x16126], NFKD: [0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x16121, 0x1611F], NFC: [0x16126], NFD: [0x1611E, 0x1611E, 0x1611F], NFKC: [0x16126], NFKD: [0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x1611E, 0x16124], NFC: [0x16127], NFD: [0x1611E, 0x16129, 0x1611F], NFKC: [0x16127], NFKD: [0x1611E, 0x16129, 0x1611F] }, +{ source: [0x16122, 0x1611F], NFC: [0x16127], NFD: [0x1611E, 0x16129, 0x1611F], NFKC: [0x16127], NFKD: [0x1611E, 0x16129, 0x1611F] }, +{ source: [0x1611E, 0x16125], NFC: [0x16128], NFD: [0x1611E, 0x1611E, 0x16120], NFKC: [0x16128], NFKD: [0x1611E, 0x1611E, 0x16120] }, +{ source: [0x16121, 0x16120], NFC: [0x16128], NFD: [0x1611E, 0x1611E, 0x16120], NFKC: [0x16128], NFKD: [0x1611E, 0x1611E, 0x16120] }, +{ source: [0x16D63, 0x16D68], NFC: [0x16D6A], NFD: [0x16D63, 0x16D67, 0x16D67], NFKC: [0x16D6A], NFKD: [0x16D63, 0x16D67, 0x16D67] }, +{ source: [0x16D69, 0x16D67], NFC: [0x16D6A], NFD: [0x16D63, 0x16D67, 0x16D67], NFKC: [0x16D6A], NFKD: [0x16D63, 0x16D67, 0x16D67] }, +{ source: [0x1D15F, 0x1D16E], NFC: [0x1D158, 0x1D165, 0x1D16E], NFD: [0x1D158, 0x1D165, 0x1D16E], NFKC: [0x1D158, 0x1D165, 0x1D16E], NFKD: [0x1D158, 0x1D165, 0x1D16E] }, +{ source: [0x1D15F, 0x1D16F], NFC: [0x1D158, 0x1D165, 0x1D16F], NFD: [0x1D158, 0x1D165, 0x1D16F], NFKC: [0x1D158, 0x1D165, 0x1D16F], NFKD: [0x1D158, 0x1D165, 0x1D16F] }, +{ source: [0x1D15F, 0x1D170], NFC: [0x1D158, 0x1D165, 0x1D170], NFD: [0x1D158, 0x1D165, 0x1D170], NFKC: [0x1D158, 0x1D165, 0x1D170], NFKD: [0x1D158, 0x1D165, 0x1D170] }, +{ source: [0x1D15F, 0x1D171], NFC: [0x1D158, 0x1D165, 0x1D171], NFD: [0x1D158, 0x1D165, 0x1D171], NFKC: [0x1D158, 0x1D165, 0x1D171], NFKD: [0x1D158, 0x1D165, 0x1D171] }, +{ source: [0x1D15F, 0x1D172], NFC: [0x1D158, 0x1D165, 0x1D172], NFD: [0x1D158, 0x1D165, 0x1D172], NFKC: [0x1D158, 0x1D165, 0x1D172], NFKD: [0x1D158, 0x1D165, 0x1D172] }, +{ source: [0x1D1BB, 0x1D16E], NFC: [0x1D1B9, 0x1D165, 0x1D16E], NFD: [0x1D1B9, 0x1D165, 0x1D16E], NFKC: [0x1D1B9, 0x1D165, 0x1D16E], NFKD: [0x1D1B9, 0x1D165, 0x1D16E] }, +{ source: [0x1D1BC, 0x1D16E], NFC: [0x1D1BA, 0x1D165, 0x1D16E], NFD: [0x1D1BA, 0x1D165, 0x1D16E], NFKC: [0x1D1BA, 0x1D165, 0x1D16E], NFKD: [0x1D1BA, 0x1D165, 0x1D16E] }, +{ source: [0x1D1BB, 0x1D16F], NFC: [0x1D1B9, 0x1D165, 0x1D16F], NFD: [0x1D1B9, 0x1D165, 0x1D16F], NFKC: [0x1D1B9, 0x1D165, 0x1D16F], NFKD: [0x1D1B9, 0x1D165, 0x1D16F] }, +{ source: [0x1D1BC, 0x1D16F], NFC: [0x1D1BA, 0x1D165, 0x1D16F], NFD: [0x1D1BA, 0x1D165, 0x1D16F], NFKC: [0x1D1BA, 0x1D165, 0x1D16F], NFKD: [0x1D1BA, 0x1D165, 0x1D16F] } +]; +/* Part5 # Chained primary composites */ +var tests_part5 = [ +{ source: [0x1138B, 0x113C7], NFC: [0x1138E, 0x113B8], NFD: [0x1138B, 0x113C2, 0x113B8], NFKC: [0x1138E, 0x113B8], NFKD: [0x1138B, 0x113C2, 0x113B8] }, +{ source: [0x113C2, 0x113C7], NFC: [0x113C5, 0x113B8], NFD: [0x113C2, 0x113C2, 0x113B8], NFKC: [0x113C5, 0x113B8], NFKD: [0x113C2, 0x113C2, 0x113B8] }, +{ source: [0x1138B, 0x113C5], NFC: [0x1138E, 0x113C2], NFD: [0x1138B, 0x113C2, 0x113C2], NFKC: [0x1138E, 0x113C2], NFKD: [0x1138B, 0x113C2, 0x113C2] }, +{ source: [0x1138B, 0x113C5, 0x113C2], NFC: [0x1138E, 0x113C5], NFD: [0x1138B, 0x113C2, 0x113C2, 0x113C2], NFKC: [0x1138E, 0x113C5], NFKD: [0x1138B, 0x113C2, 0x113C2, 0x113C2] }, +{ source: [0x1138B, 0x113C5, 0x113B8], NFC: [0x1138E, 0x113C7], NFD: [0x1138B, 0x113C2, 0x113C2, 0x113B8], NFKC: [0x1138E, 0x113C7], NFKD: [0x1138B, 0x113C2, 0x113C2, 0x113B8] }, +{ source: [0x1138B, 0x113C5, 0x113C9], NFC: [0x1138E, 0x113C8], NFD: [0x1138B, 0x113C2, 0x113C2, 0x113C9], NFKC: [0x1138E, 0x113C8], NFKD: [0x1138B, 0x113C2, 0x113C2, 0x113C9] }, +{ source: [0x113C2, 0x113C5], NFC: [0x113C5, 0x113C2], NFD: [0x113C2, 0x113C2, 0x113C2], NFKC: [0x113C5, 0x113C2], NFKD: [0x113C2, 0x113C2, 0x113C2] }, +{ source: [0x113C2, 0x113C5, 0x113C2], NFC: [0x113C5, 0x113C5], NFD: [0x113C2, 0x113C2, 0x113C2, 0x113C2], NFKC: [0x113C5, 0x113C5], NFKD: [0x113C2, 0x113C2, 0x113C2, 0x113C2] }, +{ source: [0x113C2, 0x113C5, 0x113B8], NFC: [0x113C5, 0x113C7], NFD: [0x113C2, 0x113C2, 0x113C2, 0x113B8], NFKC: [0x113C5, 0x113C7], NFKD: [0x113C2, 0x113C2, 0x113C2, 0x113B8] }, +{ source: [0x113C2, 0x113C5, 0x113C9], NFC: [0x113C5, 0x113C8], NFD: [0x113C2, 0x113C2, 0x113C2, 0x113C9], NFKC: [0x113C5, 0x113C8], NFKD: [0x113C2, 0x113C2, 0x113C2, 0x113C9] }, +{ source: [0x1138B, 0x113C8], NFC: [0x1138E, 0x113C9], NFD: [0x1138B, 0x113C2, 0x113C9], NFKC: [0x1138E, 0x113C9], NFKD: [0x1138B, 0x113C2, 0x113C9] }, +{ source: [0x113C2, 0x113C8], NFC: [0x113C5, 0x113C9], NFD: [0x113C2, 0x113C2, 0x113C9], NFKC: [0x113C5, 0x113C9], NFKD: [0x113C2, 0x113C2, 0x113C9] }, +{ source: [0x16121, 0x1611E, 0x1611F], NFC: [0x16121, 0x16123], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611F], NFKC: [0x16121, 0x16123], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x16121, 0x16129, 0x1611F], NFC: [0x16121, 0x16124], NFD: [0x1611E, 0x1611E, 0x16129, 0x1611F], NFKC: [0x16121, 0x16124], NFKD: [0x1611E, 0x1611E, 0x16129, 0x1611F] }, +{ source: [0x16121, 0x1611E, 0x16120], NFC: [0x16121, 0x16125], NFD: [0x1611E, 0x1611E, 0x1611E, 0x16120], NFKC: [0x16121, 0x16125], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x16120] }, +{ source: [0x1611E, 0x16121], NFC: [0x16121, 0x1611E], NFD: [0x1611E, 0x1611E, 0x1611E], NFKC: [0x16121, 0x1611E], NFKD: [0x1611E, 0x1611E, 0x1611E] }, +{ source: [0x1611E, 0x16121, 0x1611E], NFC: [0x16121, 0x16121], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611E], NFKC: [0x16121, 0x16121], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611E] }, +{ source: [0x1611E, 0x16121, 0x16129], NFC: [0x16121, 0x16122], NFD: [0x1611E, 0x1611E, 0x1611E, 0x16129], NFKC: [0x16121, 0x16122], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x16129] }, +{ source: [0x1611E, 0x16126], NFC: [0x16121, 0x16123], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611F], NFKC: [0x16121, 0x16123], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x1611E, 0x16121, 0x1611F], NFC: [0x16121, 0x16123], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611F], NFKC: [0x16121, 0x16123], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x1611E, 0x16128], NFC: [0x16121, 0x16125], NFD: [0x1611E, 0x1611E, 0x1611E, 0x16120], NFKC: [0x16121, 0x16125], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x16120] }, +{ source: [0x1611E, 0x16121, 0x16120], NFC: [0x16121, 0x16125], NFD: [0x1611E, 0x1611E, 0x1611E, 0x16120], NFKC: [0x16121, 0x16125], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x16120] }, +{ source: [0x1611E, 0x16121, 0x16123], NFC: [0x16121, 0x16126], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x1611F], NFKC: [0x16121, 0x16126], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x1611E, 0x16121, 0x1611E, 0x1611F], NFC: [0x16121, 0x16126], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x1611F], NFKC: [0x16121, 0x16126], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x1611F] }, +{ source: [0x1611E, 0x16121, 0x16124], NFC: [0x16121, 0x16127], NFD: [0x1611E, 0x1611E, 0x1611E, 0x16129, 0x1611F], NFKC: [0x16121, 0x16127], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x16129, 0x1611F] }, +{ source: [0x1611E, 0x16121, 0x16129, 0x1611F], NFC: [0x16121, 0x16127], NFD: [0x1611E, 0x1611E, 0x1611E, 0x16129, 0x1611F], NFKC: [0x16121, 0x16127], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x16129, 0x1611F] }, +{ source: [0x1611E, 0x16121, 0x16125], NFC: [0x16121, 0x16128], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x16120], NFKC: [0x16121, 0x16128], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x16120] }, +{ source: [0x1611E, 0x16121, 0x1611E, 0x16120], NFC: [0x16121, 0x16128], NFD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x16120], NFKC: [0x16121, 0x16128], NFKD: [0x1611E, 0x1611E, 0x1611E, 0x1611E, 0x16120] }, +{ source: [0x1611E, 0x16127], NFC: [0x16121, 0x16124], NFD: [0x1611E, 0x1611E, 0x16129, 0x1611F], NFKC: [0x16121, 0x16124], NFKD: [0x1611E, 0x1611E, 0x16129, 0x1611F] }, +{ source: [0x1611E, 0x16122, 0x1611F], NFC: [0x16121, 0x16124], NFD: [0x1611E, 0x1611E, 0x16129, 0x1611F], NFKC: [0x16121, 0x16124], NFKD: [0x1611E, 0x1611E, 0x16129, 0x1611F] }, +{ source: [0x1611E, 0x16122], NFC: [0x16121, 0x16129], NFD: [0x1611E, 0x1611E, 0x16129], NFKC: [0x16121, 0x16129], NFKD: [0x1611E, 0x1611E, 0x16129] }, +{ source: [0x16D67, 0x16D68], NFC: [0x16D68, 0x16D67], NFD: [0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D68, 0x16D67], NFKD: [0x16D67, 0x16D67, 0x16D67] }, +{ source: [0x16D67, 0x16D68, 0x16D67], NFC: [0x16D68, 0x16D68], NFD: [0x16D67, 0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D68, 0x16D68], NFKD: [0x16D67, 0x16D67, 0x16D67, 0x16D67] }, +{ source: [0x16D63, 0x16D68, 0x16D67], NFC: [0x16D6A, 0x16D67], NFD: [0x16D63, 0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D6A, 0x16D67], NFKD: [0x16D63, 0x16D67, 0x16D67, 0x16D67] }, +{ source: [0x16D69, 0x16D68], NFC: [0x16D6A, 0x16D67], NFD: [0x16D63, 0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D6A, 0x16D67], NFKD: [0x16D63, 0x16D67, 0x16D67, 0x16D67] }, +{ source: [0x16D63, 0x16D67, 0x16D68], NFC: [0x16D6A, 0x16D67], NFD: [0x16D63, 0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D6A, 0x16D67], NFKD: [0x16D63, 0x16D67, 0x16D67, 0x16D67] }, +{ source: [0x16D69, 0x16D68, 0x16D67], NFC: [0x16D6A, 0x16D68], NFD: [0x16D63, 0x16D67, 0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D6A, 0x16D68], NFKD: [0x16D63, 0x16D67, 0x16D67, 0x16D67, 0x16D67] }, +{ source: [0x16D63, 0x16D67, 0x16D68, 0x16D67], NFC: [0x16D6A, 0x16D68], NFD: [0x16D63, 0x16D67, 0x16D67, 0x16D67, 0x16D67], NFKC: [0x16D6A, 0x16D68], NFKD: [0x16D63, 0x16D67, 0x16D67, 0x16D67, 0x16D67] } ]; diff --git a/test/staging/sm/String/string-code-point-upper-lower-mapping.js b/test/staging/sm/String/string-code-point-upper-lower-mapping.js index 66a8258fb6a..589a1ae38cc 100644 --- a/test/staging/sm/String/string-code-point-upper-lower-mapping.js +++ b/test/staging/sm/String/string-code-point-upper-lower-mapping.js @@ -12,7 +12,7 @@ description: | esid: pending ---*/ /* Generated by make_unicode.py DO NOT MODIFY */ -/* Unicode version: 15.0.0 */ +/* Unicode version: 16.0.0 */ assert.sameValue(String.fromCodePoint(0x10428).toUpperCase().codePointAt(0), 0x10400); // DESERET SMALL LETTER LONG I, DESERET CAPITAL LETTER LONG I assert.sameValue(String.fromCodePoint(0x10429).toUpperCase().codePointAt(0), 0x10401); // DESERET SMALL LETTER LONG E, DESERET CAPITAL LETTER LONG E @@ -176,6 +176,28 @@ assert.sameValue(String.fromCodePoint(0x10CEF).toUpperCase().codePointAt(0), 0x1 assert.sameValue(String.fromCodePoint(0x10CF0).toUpperCase().codePointAt(0), 0x10CB0); // OLD HUNGARIAN SMALL LETTER EZS, OLD HUNGARIAN CAPITAL LETTER EZS assert.sameValue(String.fromCodePoint(0x10CF1).toUpperCase().codePointAt(0), 0x10CB1); // OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN, OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN assert.sameValue(String.fromCodePoint(0x10CF2).toUpperCase().codePointAt(0), 0x10CB2); // OLD HUNGARIAN SMALL LETTER US, OLD HUNGARIAN CAPITAL LETTER US +assert.sameValue(String.fromCodePoint(0x10D70).toUpperCase().codePointAt(0), 0x10D50); // GARAY SMALL LETTER A, GARAY CAPITAL LETTER A +assert.sameValue(String.fromCodePoint(0x10D71).toUpperCase().codePointAt(0), 0x10D51); // GARAY SMALL LETTER CA, GARAY CAPITAL LETTER CA +assert.sameValue(String.fromCodePoint(0x10D72).toUpperCase().codePointAt(0), 0x10D52); // GARAY SMALL LETTER MA, GARAY CAPITAL LETTER MA +assert.sameValue(String.fromCodePoint(0x10D73).toUpperCase().codePointAt(0), 0x10D53); // GARAY SMALL LETTER KA, GARAY CAPITAL LETTER KA +assert.sameValue(String.fromCodePoint(0x10D74).toUpperCase().codePointAt(0), 0x10D54); // GARAY SMALL LETTER BA, GARAY CAPITAL LETTER BA +assert.sameValue(String.fromCodePoint(0x10D75).toUpperCase().codePointAt(0), 0x10D55); // GARAY SMALL LETTER JA, GARAY CAPITAL LETTER JA +assert.sameValue(String.fromCodePoint(0x10D76).toUpperCase().codePointAt(0), 0x10D56); // GARAY SMALL LETTER SA, GARAY CAPITAL LETTER SA +assert.sameValue(String.fromCodePoint(0x10D77).toUpperCase().codePointAt(0), 0x10D57); // GARAY SMALL LETTER WA, GARAY CAPITAL LETTER WA +assert.sameValue(String.fromCodePoint(0x10D78).toUpperCase().codePointAt(0), 0x10D58); // GARAY SMALL LETTER LA, GARAY CAPITAL LETTER LA +assert.sameValue(String.fromCodePoint(0x10D79).toUpperCase().codePointAt(0), 0x10D59); // GARAY SMALL LETTER GA, GARAY CAPITAL LETTER GA +assert.sameValue(String.fromCodePoint(0x10D7A).toUpperCase().codePointAt(0), 0x10D5A); // GARAY SMALL LETTER DA, GARAY CAPITAL LETTER DA +assert.sameValue(String.fromCodePoint(0x10D7B).toUpperCase().codePointAt(0), 0x10D5B); // GARAY SMALL LETTER XA, GARAY CAPITAL LETTER XA +assert.sameValue(String.fromCodePoint(0x10D7C).toUpperCase().codePointAt(0), 0x10D5C); // GARAY SMALL LETTER YA, GARAY CAPITAL LETTER YA +assert.sameValue(String.fromCodePoint(0x10D7D).toUpperCase().codePointAt(0), 0x10D5D); // GARAY SMALL LETTER TA, GARAY CAPITAL LETTER TA +assert.sameValue(String.fromCodePoint(0x10D7E).toUpperCase().codePointAt(0), 0x10D5E); // GARAY SMALL LETTER RA, GARAY CAPITAL LETTER RA +assert.sameValue(String.fromCodePoint(0x10D7F).toUpperCase().codePointAt(0), 0x10D5F); // GARAY SMALL LETTER NYA, GARAY CAPITAL LETTER NYA +assert.sameValue(String.fromCodePoint(0x10D80).toUpperCase().codePointAt(0), 0x10D60); // GARAY SMALL LETTER FA, GARAY CAPITAL LETTER FA +assert.sameValue(String.fromCodePoint(0x10D81).toUpperCase().codePointAt(0), 0x10D61); // GARAY SMALL LETTER NA, GARAY CAPITAL LETTER NA +assert.sameValue(String.fromCodePoint(0x10D82).toUpperCase().codePointAt(0), 0x10D62); // GARAY SMALL LETTER PA, GARAY CAPITAL LETTER PA +assert.sameValue(String.fromCodePoint(0x10D83).toUpperCase().codePointAt(0), 0x10D63); // GARAY SMALL LETTER HA, GARAY CAPITAL LETTER HA +assert.sameValue(String.fromCodePoint(0x10D84).toUpperCase().codePointAt(0), 0x10D64); // GARAY SMALL LETTER OLD KA, GARAY CAPITAL LETTER OLD KA +assert.sameValue(String.fromCodePoint(0x10D85).toUpperCase().codePointAt(0), 0x10D65); // GARAY SMALL LETTER OLD NA, GARAY CAPITAL LETTER OLD NA assert.sameValue(String.fromCodePoint(0x118C0).toUpperCase().codePointAt(0), 0x118A0); // WARANG CITI SMALL LETTER NGAA, WARANG CITI CAPITAL LETTER NGAA assert.sameValue(String.fromCodePoint(0x118C1).toUpperCase().codePointAt(0), 0x118A1); // WARANG CITI SMALL LETTER A, WARANG CITI CAPITAL LETTER A assert.sameValue(String.fromCodePoint(0x118C2).toUpperCase().codePointAt(0), 0x118A2); // WARANG CITI SMALL LETTER WI, WARANG CITI CAPITAL LETTER WI @@ -436,6 +458,28 @@ assert.sameValue(String.fromCodePoint(0x10CAF).toLowerCase().codePointAt(0), 0x1 assert.sameValue(String.fromCodePoint(0x10CB0).toLowerCase().codePointAt(0), 0x10CF0); // OLD HUNGARIAN CAPITAL LETTER EZS, OLD HUNGARIAN SMALL LETTER EZS assert.sameValue(String.fromCodePoint(0x10CB1).toLowerCase().codePointAt(0), 0x10CF1); // OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN, OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN assert.sameValue(String.fromCodePoint(0x10CB2).toLowerCase().codePointAt(0), 0x10CF2); // OLD HUNGARIAN CAPITAL LETTER US, OLD HUNGARIAN SMALL LETTER US +assert.sameValue(String.fromCodePoint(0x10D50).toLowerCase().codePointAt(0), 0x10D70); // GARAY CAPITAL LETTER A, GARAY SMALL LETTER A +assert.sameValue(String.fromCodePoint(0x10D51).toLowerCase().codePointAt(0), 0x10D71); // GARAY CAPITAL LETTER CA, GARAY SMALL LETTER CA +assert.sameValue(String.fromCodePoint(0x10D52).toLowerCase().codePointAt(0), 0x10D72); // GARAY CAPITAL LETTER MA, GARAY SMALL LETTER MA +assert.sameValue(String.fromCodePoint(0x10D53).toLowerCase().codePointAt(0), 0x10D73); // GARAY CAPITAL LETTER KA, GARAY SMALL LETTER KA +assert.sameValue(String.fromCodePoint(0x10D54).toLowerCase().codePointAt(0), 0x10D74); // GARAY CAPITAL LETTER BA, GARAY SMALL LETTER BA +assert.sameValue(String.fromCodePoint(0x10D55).toLowerCase().codePointAt(0), 0x10D75); // GARAY CAPITAL LETTER JA, GARAY SMALL LETTER JA +assert.sameValue(String.fromCodePoint(0x10D56).toLowerCase().codePointAt(0), 0x10D76); // GARAY CAPITAL LETTER SA, GARAY SMALL LETTER SA +assert.sameValue(String.fromCodePoint(0x10D57).toLowerCase().codePointAt(0), 0x10D77); // GARAY CAPITAL LETTER WA, GARAY SMALL LETTER WA +assert.sameValue(String.fromCodePoint(0x10D58).toLowerCase().codePointAt(0), 0x10D78); // GARAY CAPITAL LETTER LA, GARAY SMALL LETTER LA +assert.sameValue(String.fromCodePoint(0x10D59).toLowerCase().codePointAt(0), 0x10D79); // GARAY CAPITAL LETTER GA, GARAY SMALL LETTER GA +assert.sameValue(String.fromCodePoint(0x10D5A).toLowerCase().codePointAt(0), 0x10D7A); // GARAY CAPITAL LETTER DA, GARAY SMALL LETTER DA +assert.sameValue(String.fromCodePoint(0x10D5B).toLowerCase().codePointAt(0), 0x10D7B); // GARAY CAPITAL LETTER XA, GARAY SMALL LETTER XA +assert.sameValue(String.fromCodePoint(0x10D5C).toLowerCase().codePointAt(0), 0x10D7C); // GARAY CAPITAL LETTER YA, GARAY SMALL LETTER YA +assert.sameValue(String.fromCodePoint(0x10D5D).toLowerCase().codePointAt(0), 0x10D7D); // GARAY CAPITAL LETTER TA, GARAY SMALL LETTER TA +assert.sameValue(String.fromCodePoint(0x10D5E).toLowerCase().codePointAt(0), 0x10D7E); // GARAY CAPITAL LETTER RA, GARAY SMALL LETTER RA +assert.sameValue(String.fromCodePoint(0x10D5F).toLowerCase().codePointAt(0), 0x10D7F); // GARAY CAPITAL LETTER NYA, GARAY SMALL LETTER NYA +assert.sameValue(String.fromCodePoint(0x10D60).toLowerCase().codePointAt(0), 0x10D80); // GARAY CAPITAL LETTER FA, GARAY SMALL LETTER FA +assert.sameValue(String.fromCodePoint(0x10D61).toLowerCase().codePointAt(0), 0x10D81); // GARAY CAPITAL LETTER NA, GARAY SMALL LETTER NA +assert.sameValue(String.fromCodePoint(0x10D62).toLowerCase().codePointAt(0), 0x10D82); // GARAY CAPITAL LETTER PA, GARAY SMALL LETTER PA +assert.sameValue(String.fromCodePoint(0x10D63).toLowerCase().codePointAt(0), 0x10D83); // GARAY CAPITAL LETTER HA, GARAY SMALL LETTER HA +assert.sameValue(String.fromCodePoint(0x10D64).toLowerCase().codePointAt(0), 0x10D84); // GARAY CAPITAL LETTER OLD KA, GARAY SMALL LETTER OLD KA +assert.sameValue(String.fromCodePoint(0x10D65).toLowerCase().codePointAt(0), 0x10D85); // GARAY CAPITAL LETTER OLD NA, GARAY SMALL LETTER OLD NA assert.sameValue(String.fromCodePoint(0x118A0).toLowerCase().codePointAt(0), 0x118C0); // WARANG CITI CAPITAL LETTER NGAA, WARANG CITI SMALL LETTER NGAA assert.sameValue(String.fromCodePoint(0x118A1).toLowerCase().codePointAt(0), 0x118C1); // WARANG CITI CAPITAL LETTER A, WARANG CITI SMALL LETTER A assert.sameValue(String.fromCodePoint(0x118A2).toLowerCase().codePointAt(0), 0x118C2); // WARANG CITI CAPITAL LETTER WI, WARANG CITI SMALL LETTER WI diff --git a/test/staging/sm/String/string-space-trim.js b/test/staging/sm/String/string-space-trim.js index 78086fd9371..5bf212e6974 100644 --- a/test/staging/sm/String/string-space-trim.js +++ b/test/staging/sm/String/string-space-trim.js @@ -12,7 +12,7 @@ description: | esid: pending ---*/ /* Generated by make_unicode.py DO NOT MODIFY */ -/* Unicode version: 15.0.0 */ +/* Unicode version: 16.0.0 */ var onlySpace = String.fromCharCode( 0x0009 /* (CHARACTER TABULATION) */, diff --git a/test/staging/sm/String/string-upper-lower-mapping.js b/test/staging/sm/String/string-upper-lower-mapping.js index 2eb443407a1..cd589c1df7a 100644 --- a/test/staging/sm/String/string-upper-lower-mapping.js +++ b/test/staging/sm/String/string-upper-lower-mapping.js @@ -12,7 +12,7 @@ description: | esid: pending ---*/ /* Generated by make_unicode.py DO NOT MODIFY */ -/* Unicode version: 15.0.0 */ +/* Unicode version: 16.0.0 */ var mapping = [ ["\u0000", "\u0000"], /* (NULL) */ @@ -426,7 +426,7 @@ var mapping = [ ["\u0198", "\u0199"], /* LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK) */ ["\u0198", "\u0199"], /* LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK) */ ["\u023D", "\u019A"], /* LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L) */ - ["\u019B", "\u019B"], /* LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA) */ + ["\uA7DC", "\u019B"], /* LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA) */ ["\u019C", "\u026F"], /* LATIN CAPITAL LETTER TURNED M */ ["\u019D", "\u0272"], /* LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK) */ ["\u0220", "\u019E"], /* LATIN SMALL LETTER N WITH LONG RIGHT LEG */ @@ -627,7 +627,7 @@ var mapping = [ ["\uA7AC", "\u0261"], /* LATIN SMALL LETTER SCRIPT G */ ["\u0262", "\u0262"], /* LATIN LETTER SMALL CAPITAL G */ ["\u0194", "\u0263"], /* LATIN SMALL LETTER GAMMA */ - ["\u0264", "\u0264"], /* LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA) */ + ["\uA7CB", "\u0264"], /* LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA) */ ["\uA78D", "\u0265"], /* LATIN SMALL LETTER TURNED H */ ["\uA7AA", "\u0266"], /* LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK) */ ["\u0267", "\u0267"], /* LATIN SMALL LETTER HENG WITH HOOK (LATIN SMALL LETTER HENG HOOK) */ @@ -2214,7 +2214,7 @@ var mapping = [ ["\u0894", "\u0894"], ["\u0895", "\u0895"], ["\u0896", "\u0896"], - ["\u0897", "\u0897"], + ["\u0897", "\u0897"], /* ARABIC PEPET */ ["\u0898", "\u0898"], /* ARABIC SMALL HIGH WORD AL-JUZ */ ["\u0899", "\u0899"], /* ARABIC SMALL LOW WORD ISHMAAM */ ["\u089A", "\u089A"], /* ARABIC SMALL LOW WORD IMAALA */ @@ -7005,8 +7005,8 @@ var mapping = [ ["\u1B4B", "\u1B4B"], /* BALINESE LETTER ASYURA SASAK */ ["\u1B4C", "\u1B4C"], /* BALINESE LETTER ARCHAIC JNYA */ ["\u1B4D", "\u1B4D"], - ["\u1B4E", "\u1B4E"], - ["\u1B4F", "\u1B4F"], + ["\u1B4E", "\u1B4E"], /* BALINESE INVERTED CARIK SIKI */ + ["\u1B4F", "\u1B4F"], /* BALINESE INVERTED CARIK PAREREN */ ["\u1B50", "\u1B50"], /* BALINESE DIGIT ZERO */ ["\u1B51", "\u1B51"], /* BALINESE DIGIT ONE */ ["\u1B52", "\u1B52"], /* BALINESE DIGIT TWO */ @@ -7054,7 +7054,7 @@ var mapping = [ ["\u1B7C", "\u1B7C"], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING */ ["\u1B7D", "\u1B7D"], /* BALINESE PANTI LANTANG */ ["\u1B7E", "\u1B7E"], /* BALINESE PAMADA LANTANG */ - ["\u1B7F", "\u1B7F"], + ["\u1B7F", "\u1B7F"], /* BALINESE PANTI BAWAK */ ["\u1B80", "\u1B80"], /* SUNDANESE SIGN PANYECEK */ ["\u1B81", "\u1B81"], /* SUNDANESE SIGN PANGLAYAR */ ["\u1B82", "\u1B82"], /* SUNDANESE SIGN PANGWISAD */ @@ -7320,8 +7320,8 @@ var mapping = [ ["\u042A", "\u1C86"], /* CYRILLIC SMALL LETTER TALL HARD SIGN */ ["\u0462", "\u1C87"], /* CYRILLIC SMALL LETTER TALL YAT */ ["\uA64A", "\u1C88"], /* CYRILLIC SMALL LETTER UNBLENDED UK */ - ["\u1C89", "\u1C89"], - ["\u1C8A", "\u1C8A"], + ["\u1C89", "\u1C8A"], /* CYRILLIC CAPITAL LETTER TJE */ + ["\u1C89", "\u1C8A"], /* CYRILLIC SMALL LETTER TJE */ ["\u1C8B", "\u1C8B"], ["\u1C8C", "\u1C8C"], ["\u1C8D", "\u1C8D"], @@ -9270,9 +9270,9 @@ var mapping = [ ["\u2424", "\u2424"], /* SYMBOL FOR NEWLINE (GRAPHIC FOR NEWLINE) */ ["\u2425", "\u2425"], /* SYMBOL FOR DELETE FORM TWO */ ["\u2426", "\u2426"], /* SYMBOL FOR SUBSTITUTE FORM TWO */ - ["\u2427", "\u2427"], - ["\u2428", "\u2428"], - ["\u2429", "\u2429"], + ["\u2427", "\u2427"], /* SYMBOL FOR DELETE SQUARE CHECKER BOARD FORM */ + ["\u2428", "\u2428"], /* SYMBOL FOR DELETE RECTANGULAR CHECKER BOARD FORM */ + ["\u2429", "\u2429"], /* SYMBOL FOR DELETE MEDIUM SHADE FORM */ ["\u242A", "\u242A"], ["\u242B", "\u242B"], ["\u242C", "\u242C"], @@ -12299,10 +12299,10 @@ var mapping = [ ["\u2FF9", "\u2FF9"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT */ ["\u2FFA", "\u2FFA"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT */ ["\u2FFB", "\u2FFB"], /* IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID */ - ["\u2FFC", "\u2FFC"], - ["\u2FFD", "\u2FFD"], - ["\u2FFE", "\u2FFE"], - ["\u2FFF", "\u2FFF"], + ["\u2FFC", "\u2FFC"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM RIGHT */ + ["\u2FFD", "\u2FFD"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT */ + ["\u2FFE", "\u2FFE"], /* IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION */ + ["\u2FFF", "\u2FFF"], /* IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION */ ["\u3000", "\u3000"], /* IDEOGRAPHIC SPACE */ ["\u3001", "\u3001"], /* IDEOGRAPHIC COMMA */ ["\u3002", "\u3002"], /* IDEOGRAPHIC FULL STOP (IDEOGRAPHIC PERIOD) */ @@ -12787,8 +12787,8 @@ var mapping = [ ["\u31E1", "\u31E1"], /* CJK STROKE HZZZG */ ["\u31E2", "\u31E2"], /* CJK STROKE PG */ ["\u31E3", "\u31E3"], /* CJK STROKE Q */ - ["\u31E4", "\u31E4"], - ["\u31E5", "\u31E5"], + ["\u31E4", "\u31E4"], /* CJK STROKE HXG */ + ["\u31E5", "\u31E5"], /* CJK STROKE SZP */ ["\u31E6", "\u31E6"], ["\u31E7", "\u31E7"], ["\u31E8", "\u31E8"], @@ -12798,7 +12798,7 @@ var mapping = [ ["\u31EC", "\u31EC"], ["\u31ED", "\u31ED"], ["\u31EE", "\u31EE"], - ["\u31EF", "\u31EF"], + ["\u31EF", "\u31EF"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION */ ["\u31F0", "\u31F0"], /* KATAKANA LETTER SMALL KU */ ["\u31F1", "\u31F1"], /* KATAKANA LETTER SMALL SI */ ["\u31F2", "\u31F2"], /* KATAKANA LETTER SMALL SU */ @@ -42970,9 +42970,9 @@ var mapping = [ ["\uA7C7", "\uA7C8"], /* LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY */ ["\uA7C9", "\uA7CA"], /* LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */ ["\uA7C9", "\uA7CA"], /* LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY */ - ["\uA7CB", "\uA7CB"], - ["\uA7CC", "\uA7CC"], - ["\uA7CD", "\uA7CD"], + ["\uA7CB", "\u0264"], /* LATIN CAPITAL LETTER RAMS HORN */ + ["\uA7CC", "\uA7CD"], /* LATIN CAPITAL LETTER S WITH DIAGONAL STROKE */ + ["\uA7CC", "\uA7CD"], /* LATIN SMALL LETTER S WITH DIAGONAL STROKE */ ["\uA7CE", "\uA7CE"], ["\uA7CF", "\uA7CF"], ["\uA7D0", "\uA7D1"], /* LATIN CAPITAL LETTER CLOSED INSULAR G */ @@ -42985,9 +42985,9 @@ var mapping = [ ["\uA7D6", "\uA7D7"], /* LATIN SMALL LETTER MIDDLE SCOTS S */ ["\uA7D8", "\uA7D9"], /* LATIN CAPITAL LETTER SIGMOID S */ ["\uA7D8", "\uA7D9"], /* LATIN SMALL LETTER SIGMOID S */ - ["\uA7DA", "\uA7DA"], - ["\uA7DB", "\uA7DB"], - ["\uA7DC", "\uA7DC"], + ["\uA7DA", "\uA7DB"], /* LATIN CAPITAL LETTER LAMBDA */ + ["\uA7DA", "\uA7DB"], /* LATIN SMALL LETTER LAMBDA */ + ["\uA7DC", "\u019B"], /* LATIN CAPITAL LETTER LAMBDA WITH STROKE */ ["\uA7DD", "\uA7DD"], ["\uA7DE", "\uA7DE"], ["\uA7DF", "\uA7DF"], diff --git a/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js b/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js index f5ec2fe7233..f305ab16d48 100644 --- a/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js +++ b/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js @@ -15,6 +15,10 @@ esid: pending const eras = [ { name: "meiji", + // Start date is actually October 23, 1868. + // + // https://github.com/unicode-org/icu4x/issues/4892 + // https://unicode-org.atlassian.net/browse/CLDR-11375 start: "1868-09-08", end: "1912-07-29", }, @@ -65,8 +69,10 @@ for (let {name: era, start, end} of eras) { day, }); - assert.sameValue(dateWithMonth.toString({calendarName: "never"}), start); - assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), start); + let expected = eraStart.with({month, day}).toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); } } @@ -88,8 +94,10 @@ for (let {name: era, start, end} of eras) { day, }); - assert.sameValue(dateWithMonth.toString({calendarName: "never"}), start); - assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), start); + let expected = eraStart.with({day}).toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); } // After start of era. @@ -119,7 +127,7 @@ for (let {name: era, start, end} of eras) { assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); } - + // Months after start of era. for (let month = eraStart.month + 1; month <= 12; ++month) { for (let day = 1; day <= 32; ++day) { @@ -154,7 +162,7 @@ for (let {name: era, start, end} of eras) { if (end) { let lastEraYear = (eraEnd.year - eraStart.year) + 1; - + // After end of era. for (let day = 31; day <= 32; ++day) { let date = Temporal.PlainDate.from({ @@ -164,7 +172,12 @@ for (let {name: era, start, end} of eras) { monthCode: "M12", day, }); - assert.sameValue(date.toString({calendarName: "never"}), end); + + let expected = eraStart.add({years: 100 - 1}) + .with({month: 12, day}) + .toString(); + + assert.sameValue(date.toString({calendarName: "never"}), expected); } // Days after end of era. @@ -176,7 +189,7 @@ for (let {name: era, start, end} of eras) { month: eraEnd.month, day, }); - + let dateWithMonthCode = Temporal.PlainDate.from({ calendar: "japanese", era, @@ -184,11 +197,13 @@ for (let {name: era, start, end} of eras) { monthCode: eraEnd.monthCode, day, }); - - assert.sameValue(dateWithMonth.toString({calendarName: "never"}), end); - assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), end); + + let expected = eraEnd.with({day}).toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); } - + // Months after end of era. for (let month = eraEnd.month + 1; month <= 12; ++month) { for (let day = 1; day <= 32; ++day) { @@ -201,7 +216,7 @@ for (let {name: era, start, end} of eras) { month, day, }); - + let dateWithMonthCode = Temporal.PlainDate.from({ calendar: "japanese", era, @@ -209,12 +224,14 @@ for (let {name: era, start, end} of eras) { monthCode, day, }); - - assert.sameValue(dateWithMonth.toString({calendarName: "never"}), end); - assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), end); + + let expected = eraEnd.with({month, day}).toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); } } - + // Year after end of era. let yearAfterLastEraYear = lastEraYear + 1; for (let month = 1; month <= 12; ++month) { @@ -237,8 +254,12 @@ for (let {name: era, start, end} of eras) { day, }); - assert.sameValue(dateWithMonth.toString({calendarName: "never"}), end, `era=${era}, eraYear=${yearAfterLastEraYear}, month=${month}, day=${day}`); - assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), end, `era=${era}, eraYear=${yearAfterLastEraYear}, monthCode=${monthCode}, day=${day}`); + let expected = eraEnd.add({years: 1}) + .with({month, day}) + .toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); } } } diff --git a/test/staging/sm/Temporal/PlainDate/from-indian.js b/test/staging/sm/Temporal/PlainDate/from-indian.js new file mode 100644 index 00000000000..d9033a8461d --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/from-indian.js @@ -0,0 +1,27 @@ +// Copyright (C) 2025 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// https://github.com/unicode-org/icu4x/issues/5070 + +let fromIso = new Temporal.PlainDate(2000, 12, 31, "indian"); + +let fromIndian = Temporal.PlainDate.from({ + calendar: "indian", + year: fromIso.year, + month: fromIso.month, + day: fromIso.day, +}); + +assert.sameValue(fromIndian.equals(fromIso), true); + diff --git a/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js b/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js index 205bf1bc035..04004227e2c 100644 --- a/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js +++ b/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js @@ -13,13 +13,13 @@ esid: pending ---*/ // https://github.com/unicode-org/icu4x/issues/4914 -if (0) { +assertThrowsInstanceOf(() => { let date = Temporal.PlainDate.from({ calendar: "islamic-umalqura", year: -6823, monthCode: "M01", day: 1, }); - assert.sameValue(date.day, 1); -} + // assert.sameValue(date.day, 1); +}, RangeError); diff --git a/test/staging/sm/Temporal/PlainDate/non-positive-era-year.js b/test/staging/sm/Temporal/PlainDate/non-positive-era-year.js new file mode 100644 index 00000000000..853860afd99 --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/non-positive-era-year.js @@ -0,0 +1,121 @@ +// Copyright (C) 2025 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +const tests = [ + { + calendar: "gregory", + era: "gregory", + start: "0001-01-01", + }, + { + calendar: "gregory", + era: "gregory-inverse", + start: "0000-01-01", + }, + + { + calendar: "japanese", + era: "reiwa", + start: "2019-05-01", + }, + { + calendar: "japanese", + era: "heisei", + start: "1989-01-08", + }, + { + calendar: "japanese", + era: "showa", + start: "1926-12-25", + }, + { + calendar: "japanese", + era: "taisho", + start: "1912-07-30", + }, + { + calendar: "japanese", + era: "meiji", + // Start date is actually October 23, 1868. + // + // https://github.com/unicode-org/icu4x/issues/4892 + // https://unicode-org.atlassian.net/browse/CLDR-11375 + start: "1868-09-08", + }, + { + calendar: "japanese", + era: "japanese", + start: "0001-01-01", + }, + { + calendar: "japanese", + era: "japanese-inverse", + start: "0000-01-01", + }, + + { + calendar: "coptic", + era: "coptic", + start: "0284-08-29", + }, + { + calendar: "coptic", + era: "coptic-inverse", + start: "0283-08-30", + }, + + { + calendar: "ethiopic", + era: "ethiopic", + start: "0008-08-27", + }, + + { + calendar: "roc", + era: "roc", + start: "1912-01-01", + }, + { + calendar: "roc", + era: "roc-inverse", + start: "1911-01-01", + }, +]; + +for (let {calendar, era, start} of tests) { + let eraStart = Temporal.PlainDate.from(start).withCalendar(calendar); + + let monthCode = "M01"; + let day = 1; + + for (let eraYear of [1, 0, -1]) { + let date = Temporal.PlainDate.from({ + calendar, + era, + eraYear, + monthCode, + day, + }); + + let years = eraYear - 1; + if (era.endsWith("-inverse")) { + years = -years; + } + + let expected = eraStart.add({years}).with({monthCode, day}); + + assert.sameValue(date.equals(expected), true, `${date} != ${expected}`); + } +} + diff --git a/test/staging/sm/Temporal/PlainDate/too-large-dates.js b/test/staging/sm/Temporal/PlainDate/too-large-dates.js new file mode 100644 index 00000000000..212cb65b580 --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/too-large-dates.js @@ -0,0 +1,48 @@ +// Copyright (C) 2025 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Ignore the result, just make sure we don't crash with a debug assertion. +function WithCalendar(date, calendar) { + try { + date.withCalendar(calendar); + } catch {} +} + +function PlainDateFrom(options) { + try { + Temporal.PlainDate.from(options); + } catch {} +} + +let min_date_iso = new Temporal.PlainDate(-271821, 4, 19); +let max_date_iso = new Temporal.PlainDate(275760, 9, 13); + +// https://github.com/unicode-org/icu4x/issues/4917 +PlainDateFrom({calendar: "chinese", year: 21206, month: 1, day: 31}); + +WithCalendar(min_date_iso, "chinese"); +WithCalendar(max_date_iso, "chinese"); + +WithCalendar(min_date_iso, "dangi"); +WithCalendar(max_date_iso, "dangi"); + +WithCalendar(min_date_iso, "islamic"); +WithCalendar(max_date_iso, "islamic"); + +WithCalendar(min_date_iso, "islamic-umalqura"); +WithCalendar(max_date_iso, "islamic-umalqura"); + +// https://github.com/unicode-org/icu4x/issues/5068 +PlainDateFrom({calendar: "islamic", year: -6149, month: 1, day: 31}); + diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js b/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js index 65d7ce94da3..4665aebb687 100644 --- a/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js +++ b/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js @@ -44,22 +44,6 @@ const monthCodes = [ "M12L", ]; -function assertSameISOFields(actual, expected) { - let actualFields = actual.getISOFields(); - let expectedFields = expected.getISOFields(); - - assert.sameValue(typeof actualFields.isoYear, "number"); - assert.sameValue(typeof actualFields.isoMonth, "number"); - assert.sameValue(typeof actualFields.isoDay, "number"); - - assert.sameValue(actualFields.isoMonth > 0, true); - assert.sameValue(actualFields.isoDay > 0, true); - - assert.sameValue(actualFields.isoYear, expectedFields.isoYear); - assert.sameValue(actualFields.isoMonth, expectedFields.isoMonth); - assert.sameValue(actualFields.isoDay, expectedFields.isoDay); -} - const calendar = "chinese"; // Months can have up to 30 days. diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js b/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js index f5427e17a04..e391d3c3227 100644 --- a/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js +++ b/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js @@ -31,24 +31,17 @@ esid: pending assert.sameValue(withMonthCode.equals(withMonth), true); } -// Inconsistent eraYear and year are ignored when monthCode is present. +// eraYear and year must be consistent when monthCode is present. { - let pmd = Temporal.PlainMonthDay.from({ + let fields = { calendar: "gregory", era: "ce", eraYear: 2024, year: 2023, monthCode: "M01", day: 1, - }); - - let expected = Temporal.PlainMonthDay.from({ - calendar: "gregory", - monthCode: "M01", - day: 1, - }); - - assert.sameValue(pmd.equals(expected), true); + }; + assertThrowsInstanceOf(() => Temporal.PlainMonthDay.from(fields), RangeError); } // eraYear and year must be consistent when month is present. diff --git a/test/staging/sm/Temporal/ZonedDateTime/zones-and-links.js b/test/staging/sm/Temporal/ZonedDateTime/zones-and-links.js new file mode 100644 index 00000000000..7168fc101b3 --- /dev/null +++ b/test/staging/sm/Temporal/ZonedDateTime/zones-and-links.js @@ -0,0 +1,674 @@ +// Copyright (C) 2025 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Generated by make_intl_data.py. DO NOT EDIT. +// tzdata version = 2024b +const zones = [ + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Fort_Nelson", + "America/Fortaleza", + "America/Glace_Bay", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Chita", + "Asia/Colombo", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kathmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Riyadh", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ulaanbaatar", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faroe", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/Perth", + "Australia/Sydney", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Ulyanovsk", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zurich", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Wake", + "Pacific/Wallis", + "UTC", +]; +const links = { + "Africa/Asmera": "Africa/Asmara", + "Africa/Timbuktu": "Africa/Bamako", + "America/Argentina/ComodRivadavia": "America/Argentina/Catamarca", + "America/Atka": "America/Adak", + "America/Buenos_Aires": "America/Argentina/Buenos_Aires", + "America/Catamarca": "America/Argentina/Catamarca", + "America/Coral_Harbour": "America/Atikokan", + "America/Cordoba": "America/Argentina/Cordoba", + "America/Ensenada": "America/Tijuana", + "America/Fort_Wayne": "America/Indiana/Indianapolis", + "America/Godthab": "America/Nuuk", + "America/Indianapolis": "America/Indiana/Indianapolis", + "America/Jujuy": "America/Argentina/Jujuy", + "America/Knox_IN": "America/Indiana/Knox", + "America/Louisville": "America/Kentucky/Louisville", + "America/Mendoza": "America/Argentina/Mendoza", + "America/Montreal": "America/Toronto", + "America/Nipigon": "America/Toronto", + "America/Pangnirtung": "America/Iqaluit", + "America/Porto_Acre": "America/Rio_Branco", + "America/Rainy_River": "America/Winnipeg", + "America/Rosario": "America/Argentina/Cordoba", + "America/Santa_Isabel": "America/Tijuana", + "America/Shiprock": "America/Denver", + "America/Thunder_Bay": "America/Toronto", + "America/Virgin": "America/St_Thomas", + "America/Yellowknife": "America/Edmonton", + "Antarctica/South_Pole": "Antarctica/McMurdo", + "Asia/Ashkhabad": "Asia/Ashgabat", + "Asia/Calcutta": "Asia/Kolkata", + "Asia/Choibalsan": "Asia/Ulaanbaatar", + "Asia/Chongqing": "Asia/Shanghai", + "Asia/Chungking": "Asia/Shanghai", + "Asia/Dacca": "Asia/Dhaka", + "Asia/Harbin": "Asia/Shanghai", + "Asia/Istanbul": "Europe/Istanbul", + "Asia/Kashgar": "Asia/Urumqi", + "Asia/Katmandu": "Asia/Kathmandu", + "Asia/Macao": "Asia/Macau", + "Asia/Rangoon": "Asia/Yangon", + "Asia/Saigon": "Asia/Ho_Chi_Minh", + "Asia/Tel_Aviv": "Asia/Jerusalem", + "Asia/Thimbu": "Asia/Thimphu", + "Asia/Ujung_Pandang": "Asia/Makassar", + "Asia/Ulan_Bator": "Asia/Ulaanbaatar", + "Atlantic/Faeroe": "Atlantic/Faroe", + "Atlantic/Jan_Mayen": "Arctic/Longyearbyen", + "Australia/ACT": "Australia/Sydney", + "Australia/Canberra": "Australia/Sydney", + "Australia/Currie": "Australia/Hobart", + "Australia/LHI": "Australia/Lord_Howe", + "Australia/NSW": "Australia/Sydney", + "Australia/North": "Australia/Darwin", + "Australia/Queensland": "Australia/Brisbane", + "Australia/South": "Australia/Adelaide", + "Australia/Tasmania": "Australia/Hobart", + "Australia/Victoria": "Australia/Melbourne", + "Australia/West": "Australia/Perth", + "Australia/Yancowinna": "Australia/Broken_Hill", + "Brazil/Acre": "America/Rio_Branco", + "Brazil/DeNoronha": "America/Noronha", + "Brazil/East": "America/Sao_Paulo", + "Brazil/West": "America/Manaus", + "CET": "Europe/Brussels", + "CST6CDT": "America/Chicago", + "Canada/Atlantic": "America/Halifax", + "Canada/Central": "America/Winnipeg", + "Canada/Eastern": "America/Toronto", + "Canada/Mountain": "America/Edmonton", + "Canada/Newfoundland": "America/St_Johns", + "Canada/Pacific": "America/Vancouver", + "Canada/Saskatchewan": "America/Regina", + "Canada/Yukon": "America/Whitehorse", + "Chile/Continental": "America/Santiago", + "Chile/EasterIsland": "Pacific/Easter", + "Cuba": "America/Havana", + "EET": "Europe/Athens", + "EST": "America/Panama", + "EST5EDT": "America/New_York", + "Egypt": "Africa/Cairo", + "Eire": "Europe/Dublin", + "Etc/GMT": "UTC", + "Etc/GMT+0": "UTC", + "Etc/GMT-0": "UTC", + "Etc/GMT0": "UTC", + "Etc/Greenwich": "UTC", + "Etc/UCT": "UTC", + "Etc/UTC": "UTC", + "Etc/Universal": "UTC", + "Etc/Zulu": "UTC", + "Europe/Belfast": "Europe/London", + "Europe/Kiev": "Europe/Kyiv", + "Europe/Nicosia": "Asia/Nicosia", + "Europe/Tiraspol": "Europe/Chisinau", + "Europe/Uzhgorod": "Europe/Kyiv", + "Europe/Zaporozhye": "Europe/Kyiv", + "GB": "Europe/London", + "GB-Eire": "Europe/London", + "GMT": "UTC", + "GMT+0": "UTC", + "GMT-0": "UTC", + "GMT0": "UTC", + "Greenwich": "UTC", + "HST": "Pacific/Honolulu", + "Hongkong": "Asia/Hong_Kong", + "Iceland": "Atlantic/Reykjavik", + "Iran": "Asia/Tehran", + "Israel": "Asia/Jerusalem", + "Jamaica": "America/Jamaica", + "Japan": "Asia/Tokyo", + "Kwajalein": "Pacific/Kwajalein", + "Libya": "Africa/Tripoli", + "MET": "Europe/Brussels", + "MST": "America/Phoenix", + "MST7MDT": "America/Denver", + "Mexico/BajaNorte": "America/Tijuana", + "Mexico/BajaSur": "America/Mazatlan", + "Mexico/General": "America/Mexico_City", + "NZ": "Pacific/Auckland", + "NZ-CHAT": "Pacific/Chatham", + "Navajo": "America/Denver", + "PRC": "Asia/Shanghai", + "PST8PDT": "America/Los_Angeles", + "Pacific/Enderbury": "Pacific/Kanton", + "Pacific/Johnston": "Pacific/Honolulu", + "Pacific/Ponape": "Pacific/Pohnpei", + "Pacific/Samoa": "Pacific/Pago_Pago", + "Pacific/Truk": "Pacific/Chuuk", + "Pacific/Yap": "Pacific/Chuuk", + "Poland": "Europe/Warsaw", + "Portugal": "Europe/Lisbon", + "ROC": "Asia/Taipei", + "ROK": "Asia/Seoul", + "Singapore": "Asia/Singapore", + "Turkey": "Europe/Istanbul", + "UCT": "UTC", + "US/Alaska": "America/Anchorage", + "US/Aleutian": "America/Adak", + "US/Arizona": "America/Phoenix", + "US/Central": "America/Chicago", + "US/East-Indiana": "America/Indiana/Indianapolis", + "US/Eastern": "America/New_York", + "US/Hawaii": "Pacific/Honolulu", + "US/Indiana-Starke": "America/Indiana/Knox", + "US/Michigan": "America/Detroit", + "US/Mountain": "America/Denver", + "US/Pacific": "America/Los_Angeles", + "US/Samoa": "Pacific/Pago_Pago", + "Universal": "UTC", + "W-SU": "Europe/Moscow", + "WET": "Europe/Lisbon", + "Zulu": "UTC", +}; + +let epochNanoseconds = [ + new Temporal.PlainDate(1900, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(1950, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(1960, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(1970, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(1980, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(1990, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(2000, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(2010, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(2020, 1, 1).toZonedDateTime("UTC").epochNanoseconds, + new Temporal.PlainDate(2030, 1, 1).toZonedDateTime("UTC").epochNanoseconds, +]; + +function timeZoneId(zdt) { + let str = zdt.toString(); + let m = str.match(/(?<=\[)[\w\/_+-]+(?=\])/); + assert.sameValue(m !== null, true, str); + return m[0]; +} + +for (let zone of zones) { + let zdt = new Temporal.ZonedDateTime(0n, zone); + + assert.sameValue(zdt.timeZoneId, zone); + assert.sameValue(timeZoneId(zdt), zone); +} + +for (let [link, zone] of Object.entries(links)) { + assert.sameValue(link === zone, false, `link=${link}, zone=${zone}`); + assert.sameValue(zones.includes(zone), true, `zone=${zone}`); + + let zdtLink = new Temporal.ZonedDateTime(0n, link); + let zdtZone = new Temporal.ZonedDateTime(0n, zone); + + assert.sameValue(zdtLink.timeZoneId, link); + assert.sameValue(timeZoneId(zdtLink), link); + + assert.sameValue(zdtZone.timeZoneId, zone); + assert.sameValue(timeZoneId(zdtZone), zone); + + assert.sameValue(zdtLink.equals(zdtZone), true, `link=${link}, zone=${zone}`); + + assert.sameValue( + zdtLink.offsetNanoseconds, + zdtZone.offsetNanoseconds, + `link=${link}, zone=${zone}` + ); + + for (let epochNs of epochNanoseconds) { + assert.sameValue( + new Temporal.ZonedDateTime(epochNs, link).offsetNanoseconds, + new Temporal.ZonedDateTime(epochNs, zone).offsetNanoseconds, + `link=${link}, zone=${zone}, epochNs=${epochNs}` + ); + } +} + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js b/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js index 843a956ee0d..ab69264916a 100644 --- a/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js +++ b/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js @@ -85,4 +85,3 @@ try { assert.sameValue(log, 'eee'); -if ('assert.sameValue' in this) diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js b/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js index 7dc9b7af854..ee9838c9e2b 100644 --- a/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js +++ b/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js @@ -37,4 +37,3 @@ try { assert.sameValue(log, "truetrue"); -if ("assert.sameValue" in this) diff --git a/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js b/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js index 0bb1f81e862..908c90b60e9 100644 --- a/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js +++ b/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js @@ -28,4 +28,3 @@ g(); assert.sameValue(x, "global-x"); assert.sameValue(log, "42g"); -if ("assert.sameValue" in this) diff --git a/test/staging/sm/module/bug1693261-async_FIXTURE.js b/test/staging/sm/module/bug1693261-async_FIXTURE.js deleted file mode 100644 index 459ae48ac42..00000000000 --- a/test/staging/sm/module/bug1693261-async_FIXTURE.js +++ /dev/null @@ -1,9 +0,0 @@ -// |reftest| skip -- support file -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -if (globalThis.testArray === undefined) { - globalThis.testArray = []; -} -globalThis.testArray.push("async 1"); -await 0; -globalThis.testArray.push("async 2"); diff --git a/test/staging/sm/module/bug1693261-c1_FIXTURE.js b/test/staging/sm/module/bug1693261-c1_FIXTURE.js deleted file mode 100644 index 74d4bb90cf2..00000000000 --- a/test/staging/sm/module/bug1693261-c1_FIXTURE.js +++ /dev/null @@ -1,8 +0,0 @@ -// |reftest| skip -- support file -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -import "./bug1693261-async_FIXTURE.js"; -if (globalThis.testArray === undefined) { - globalThis.testArray = []; -} -globalThis.testArray.push("c1"); diff --git a/test/staging/sm/module/bug1693261-c2_FIXTURE.js b/test/staging/sm/module/bug1693261-c2_FIXTURE.js deleted file mode 100644 index 8d4c8ce5870..00000000000 --- a/test/staging/sm/module/bug1693261-c2_FIXTURE.js +++ /dev/null @@ -1,8 +0,0 @@ -// |reftest| skip -- support file -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -import "./bug1693261-async_FIXTURE.js"; -if (globalThis.testArray === undefined) { - globalThis.testArray = []; -} -globalThis.testArray.push("c2"); diff --git a/test/staging/sm/module/bug1693261-x_FIXTURE.js b/test/staging/sm/module/bug1693261-x_FIXTURE.js deleted file mode 100644 index 357b5e40564..00000000000 --- a/test/staging/sm/module/bug1693261-x_FIXTURE.js +++ /dev/null @@ -1,8 +0,0 @@ -// |reftest| skip -- support file -// Copyright (C) 2024 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -import "./bug1693261-c1_FIXTURE.js"; -if (globalThis.testArray === undefined) { - globalThis.testArray = []; -} -globalThis.testArray.push("x"); diff --git a/test/staging/sm/regress/regress-563221.js b/test/staging/sm/regress/regress-563221.js index 972fc47ff87..1dbeba316ef 100644 --- a/test/staging/sm/regress/regress-563221.js +++ b/test/staging/sm/regress/regress-563221.js @@ -13,4 +13,3 @@ esid: pending ---*/ "" + eval("(function () { if (x) ; else if (y) n(); else { " + Array(10000).join("e;") + " } });"); -if (this.assert.sameValue)