summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/RegExp/unicodeSets/generated')
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js63
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js63
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js240
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js135
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js141
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js36
114 files changed, 5347 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js
new file mode 100644
index 0000000000..d8f74db909
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\d]+$/v,
+ expression: "[[0-9]--\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js
new file mode 100644
index 0000000000..3b209decb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--[0-9]]+$/v,
+ expression: "[[0-9]--[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js
new file mode 100644
index 0000000000..1f11986a68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[[0-9]--\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js
new file mode 100644
index 0000000000..8e98a440ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--_]+$/v,
+ expression: "[[0-9]--_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..0496408b2d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[[0-9]--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js
new file mode 100644
index 0000000000..8754cf2c37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[[0-9]--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js
new file mode 100644
index 0000000000..c3bd770190
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\d]+$/v,
+ expression: "[\d--\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js
new file mode 100644
index 0000000000..bdbdd0beda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--[0-9]]+$/v,
+ expression: "[\d--[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js
new file mode 100644
index 0000000000..a3f7473261
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\d--\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js
new file mode 100644
index 0000000000..da28fd8943
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--_]+$/v,
+ expression: "[\d--_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..66d4e67311
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\d--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js
new file mode 100644
index 0000000000..94cd731fce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\d--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js
new file mode 100644
index 0000000000..05b3e9ae32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\d]+$/v,
+ expression: "[\d&&\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js
new file mode 100644
index 0000000000..1c3e68be29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&[0-9]]+$/v,
+ expression: "[\d&&[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js
new file mode 100644
index 0000000000..90bcb40be7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\d&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js
new file mode 100644
index 0000000000..1ceb380aa5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&_]+$/v,
+ expression: "[\d&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..9e1d9f8a52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\d&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js
new file mode 100644
index 0000000000..08b3b2532e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\d&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js
new file mode 100644
index 0000000000..23a4d4a8db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\d]+$/v,
+ expression: "[\d\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js
new file mode 100644
index 0000000000..4a876061d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d[0-9]]+$/v,
+ expression: "[\d[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js
new file mode 100644
index 0000000000..208b9e0d9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\d\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js
new file mode 100644
index 0000000000..aa1e5ab90d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d_]+$/v,
+ expression: "[\d_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..b4f2da3da0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\d\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js
new file mode 100644
index 0000000000..9430ef5419
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\d\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js
new file mode 100644
index 0000000000..1f6a807fcb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\d]+$/v,
+ expression: "[[0-9]&&\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js
new file mode 100644
index 0000000000..d0b6d95381
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&[0-9]]+$/v,
+ expression: "[[0-9]&&[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js
new file mode 100644
index 0000000000..7ebc4c5fb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[[0-9]&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js
new file mode 100644
index 0000000000..042c1e1782
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&_]+$/v,
+ expression: "[[0-9]&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..608401ff14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[[0-9]&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js
new file mode 100644
index 0000000000..15a6d28147
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[[0-9]&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js
new file mode 100644
index 0000000000..886993514d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\d]+$/v,
+ expression: "[[0-9]\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js
new file mode 100644
index 0000000000..e24a1d32f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9][0-9]]+$/v,
+ expression: "[[0-9][0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js
new file mode 100644
index 0000000000..6d3159b3e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[[0-9]\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js
new file mode 100644
index 0000000000..9c86c50a7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]_]+$/v,
+ expression: "[[0-9]_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..51d7208c33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[[0-9]\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js
new file mode 100644
index 0000000000..9762968ceb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[[0-9]\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js
new file mode 100644
index 0000000000..03701e5e6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\d]+$/v,
+ expression: "[_--\d]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js
new file mode 100644
index 0000000000..be1fe8b83e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--[0-9]]+$/v,
+ expression: "[_--[0-9]]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js
new file mode 100644
index 0000000000..63f3f32d50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[_--\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js
new file mode 100644
index 0000000000..d8704742e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--_]+$/v,
+ expression: "[_--_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..1808274560
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[_--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js
new file mode 100644
index 0000000000..16adc0fa36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[_--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js
new file mode 100644
index 0000000000..32db0b5bd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\d]+$/v,
+ expression: "[_&&\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js
new file mode 100644
index 0000000000..4df9d43c39
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&[0-9]]+$/v,
+ expression: "[_&&[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js
new file mode 100644
index 0000000000..712352413b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[_&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js
new file mode 100644
index 0000000000..8578b51194
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&_]+$/v,
+ expression: "[_&&_]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..740a5f3ac2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[_&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js
new file mode 100644
index 0000000000..7aa02b544c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[_&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js
new file mode 100644
index 0000000000..dc08e40e3d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\d]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\d]",
+ matchStrings: [
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js
new file mode 100644
index 0000000000..8f4210b125
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--[0-9]]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--[0-9]]",
+ matchStrings: [
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js
new file mode 100644
index 0000000000..7be89eb510
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js
new file mode 100644
index 0000000000..96ec7bb58e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--_]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..e39e83f26e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js
new file mode 100644
index 0000000000..3e666325f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js
new file mode 100644
index 0000000000..478534e826
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\d]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js
new file mode 100644
index 0000000000..9573ad7b47
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&[0-9]]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js
new file mode 100644
index 0000000000..4dbca1c803
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js
new file mode 100644
index 0000000000..d6b0c11257
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&_]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..42e1095769
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js
new file mode 100644
index 0000000000..13d31bfc37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js
new file mode 100644
index 0000000000..ebf6293819
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\d]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js
new file mode 100644
index 0000000000..7d630307df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}[0-9]]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js
new file mode 100644
index 0000000000..1bac43ea61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js
new file mode 100644
index 0000000000..407534100c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js
@@ -0,0 +1,54 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}_]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "_",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..5e4a70e916
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js
@@ -0,0 +1,63 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js
new file mode 100644
index 0000000000..caa9f15f29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js
new file mode 100644
index 0000000000..11961d19fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\d]+$/v,
+ expression: "[_\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js
new file mode 100644
index 0000000000..2207df07a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_[0-9]]+$/v,
+ expression: "[_[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js
new file mode 100644
index 0000000000..ac27fe22c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js
@@ -0,0 +1,54 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[_\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "_",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js
new file mode 100644
index 0000000000..d30bb97c4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[__]+$/v,
+ expression: "[__]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..15294ce814
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js
@@ -0,0 +1,44 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[_\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js
new file mode 100644
index 0000000000..8de1295fdd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js
@@ -0,0 +1,37 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[_\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js
new file mode 100644
index 0000000000..de856512f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\d]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\d]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js
new file mode 100644
index 0000000000..83a3877a9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--[0-9]]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--[0-9]]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js
new file mode 100644
index 0000000000..935e52fab7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js
new file mode 100644
index 0000000000..6a2b3dbf22
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--_]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--_]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..2e0d4ba7bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js
new file mode 100644
index 0000000000..da68c78049
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js
new file mode 100644
index 0000000000..29e6302fbb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\d]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js
new file mode 100644
index 0000000000..da1469c0c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&[0-9]]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js
new file mode 100644
index 0000000000..0fa89e14aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js
new file mode 100644
index 0000000000..815ba85039
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&_]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..c5d769cb7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js
new file mode 100644
index 0000000000..abbf43bb71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js
new file mode 100644
index 0000000000..551a1469d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\d]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\d]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js
new file mode 100644
index 0000000000..754d0cf66d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}[0-9]]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}[0-9]]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js
new file mode 100644
index 0000000000..f09ac6c225
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js
@@ -0,0 +1,63 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js
new file mode 100644
index 0000000000..15311dc344
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js
@@ -0,0 +1,44 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}_]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}_]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..52b4863f36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js
new file mode 100644
index 0000000000..bcdaebb4e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js
@@ -0,0 +1,46 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js
new file mode 100644
index 0000000000..f7eeb369e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js
@@ -0,0 +1,240 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 13.1 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u2764\uFE0F\u200D\u{1F525}",
+ "\u2764\uFE0F\u200D\u{1FA79}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F48F}\u{1F3FB}",
+ "\u{1F48F}\u{1F3FC}",
+ "\u{1F48F}\u{1F3FD}",
+ "\u{1F48F}\u{1F3FE}",
+ "\u{1F48F}\u{1F3FF}",
+ "\u{1F491}\u{1F3FB}",
+ "\u{1F491}\u{1F3FC}",
+ "\u{1F491}\u{1F3FD}",
+ "\u{1F491}\u{1F3FE}",
+ "\u{1F491}\u{1F3FF}",
+ "\u{1F62E}\u200D\u{1F4A8}",
+ "\u{1F635}\u200D\u{1F4AB}",
+ "\u{1F636}\u200D\u{1F32B}\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D4}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2642\uFE0F"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js
new file mode 100644
index 0000000000..066dbd9a94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js
@@ -0,0 +1,135 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 14.0 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u{1F6DD}",
+ "\u{1F6DE}",
+ "\u{1F6DF}",
+ "\u{1F7F0}",
+ "\u{1F91D}\u{1F3FB}",
+ "\u{1F91D}\u{1F3FC}",
+ "\u{1F91D}\u{1F3FD}",
+ "\u{1F91D}\u{1F3FE}",
+ "\u{1F91D}\u{1F3FF}",
+ "\u{1F979}",
+ "\u{1F9CC}",
+ "\u{1FA7B}",
+ "\u{1FA7C}",
+ "\u{1FAA9}",
+ "\u{1FAAA}",
+ "\u{1FAAB}",
+ "\u{1FAAC}",
+ "\u{1FAB7}",
+ "\u{1FAB8}",
+ "\u{1FAB9}",
+ "\u{1FABA}",
+ "\u{1FAC3}",
+ "\u{1FAC3}\u{1F3FB}",
+ "\u{1FAC3}\u{1F3FC}",
+ "\u{1FAC3}\u{1F3FD}",
+ "\u{1FAC3}\u{1F3FE}",
+ "\u{1FAC3}\u{1F3FF}",
+ "\u{1FAC4}",
+ "\u{1FAC4}\u{1F3FB}",
+ "\u{1FAC4}\u{1F3FC}",
+ "\u{1FAC4}\u{1F3FD}",
+ "\u{1FAC4}\u{1F3FE}",
+ "\u{1FAC4}\u{1F3FF}",
+ "\u{1FAC5}",
+ "\u{1FAC5}\u{1F3FB}",
+ "\u{1FAC5}\u{1F3FC}",
+ "\u{1FAC5}\u{1F3FD}",
+ "\u{1FAC5}\u{1F3FE}",
+ "\u{1FAC5}\u{1F3FF}",
+ "\u{1FAD7}",
+ "\u{1FAD8}",
+ "\u{1FAD9}",
+ "\u{1FAE0}",
+ "\u{1FAE1}",
+ "\u{1FAE2}",
+ "\u{1FAE3}",
+ "\u{1FAE4}",
+ "\u{1FAE5}",
+ "\u{1FAE6}",
+ "\u{1FAE7}",
+ "\u{1FAF0}",
+ "\u{1FAF0}\u{1F3FB}",
+ "\u{1FAF0}\u{1F3FC}",
+ "\u{1FAF0}\u{1F3FD}",
+ "\u{1FAF0}\u{1F3FE}",
+ "\u{1FAF0}\u{1F3FF}",
+ "\u{1FAF1}",
+ "\u{1FAF1}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}",
+ "\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF3}",
+ "\u{1FAF3}\u{1F3FB}",
+ "\u{1FAF3}\u{1F3FC}",
+ "\u{1FAF3}\u{1F3FD}",
+ "\u{1FAF3}\u{1F3FE}",
+ "\u{1FAF3}\u{1F3FF}",
+ "\u{1FAF4}",
+ "\u{1FAF4}\u{1F3FB}",
+ "\u{1FAF4}\u{1F3FC}",
+ "\u{1FAF4}\u{1F3FD}",
+ "\u{1FAF4}\u{1F3FE}",
+ "\u{1FAF4}\u{1F3FF}",
+ "\u{1FAF5}",
+ "\u{1FAF5}\u{1F3FB}",
+ "\u{1FAF5}\u{1F3FC}",
+ "\u{1FAF5}\u{1F3FD}",
+ "\u{1FAF5}\u{1F3FE}",
+ "\u{1FAF5}\u{1F3FF}",
+ "\u{1FAF6}",
+ "\u{1FAF6}\u{1F3FB}",
+ "\u{1FAF6}\u{1F3FC}",
+ "\u{1FAF6}\u{1F3FD}",
+ "\u{1FAF6}\u{1F3FE}",
+ "\u{1FAF6}\u{1F3FF}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js
new file mode 100644
index 0000000000..03c58e25c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js
@@ -0,0 +1,54 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 15.0 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u{1F426}\u200D\u2B1B",
+ "\u{1F6DC}",
+ "\u{1FA75}",
+ "\u{1FA76}",
+ "\u{1FA77}",
+ "\u{1FA87}",
+ "\u{1FA88}",
+ "\u{1FAAD}",
+ "\u{1FAAE}",
+ "\u{1FAAF}",
+ "\u{1FABB}",
+ "\u{1FABC}",
+ "\u{1FABD}",
+ "\u{1FABF}",
+ "\u{1FACE}",
+ "\u{1FACF}",
+ "\u{1FADA}",
+ "\u{1FADB}",
+ "\u{1FAE8}",
+ "\u{1FAF7}",
+ "\u{1FAF7}\u{1F3FB}",
+ "\u{1FAF7}\u{1F3FC}",
+ "\u{1FAF7}\u{1F3FD}",
+ "\u{1FAF7}\u{1F3FE}",
+ "\u{1FAF7}\u{1F3FF}",
+ "\u{1FAF8}",
+ "\u{1FAF8}\u{1F3FB}",
+ "\u{1FAF8}\u{1F3FC}",
+ "\u{1FAF8}\u{1F3FD}",
+ "\u{1FAF8}\u{1F3FE}",
+ "\u{1FAF8}\u{1F3FF}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js
new file mode 100644
index 0000000000..c2ef032918
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js
@@ -0,0 +1,141 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 15.1 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u26D3\uFE0F\u200D\u{1F4A5}",
+ "\u{1F344}\u200D\u{1F7EB}",
+ "\u{1F34B}\u200D\u{1F7E9}",
+ "\u{1F3C3}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u27A1\uFE0F",
+ "\u{1F426}\u200D\u{1F525}",
+ "\u{1F468}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F642}\u200D\u2194\uFE0F",
+ "\u{1F642}\u200D\u2195\uFE0F",
+ "\u{1F6B6}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9D1}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u200D\u{1F9D1}\u200D\u{1F9D2}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u200D\u{1F9D2}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BD}\u200D\u27A1\uFE0F"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js
new file mode 100644
index 0000000000..591d3924c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js
@@ -0,0 +1,115 @@
+// GENERATED, DO NOT EDIT
+// file: regExpUtils.js
+// Copyright (C) 2017 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of RegExp objects.
+defines: [buildString, testPropertyEscapes, testPropertyOfStrings, testExtendedCharacterClass, matchValidator]
+---*/
+
+function buildString(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const loneCodePoints = args.loneCodePoints;
+ const ranges = args.ranges;
+ const CHUNK_SIZE = 10000;
+ let result = Reflect.apply(String.fromCodePoint, null, loneCodePoints);
+ for (let i = 0; i < ranges.length; i++) {
+ const range = ranges[i];
+ const start = range[0];
+ const end = range[1];
+ const codePoints = [];
+ for (let length = 0, codePoint = start; codePoint <= end; codePoint++) {
+ codePoints[length++] = codePoint;
+ if (length === CHUNK_SIZE) {
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ codePoints.length = length = 0;
+ }
+ }
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ }
+ return result;
+}
+
+function printCodePoint(codePoint) {
+ const hex = codePoint
+ .toString(16)
+ .toUpperCase()
+ .padStart(6, "0");
+ return `U+${hex}`;
+}
+
+function printStringCodePoints(string) {
+ const buf = [];
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ buf.push(formatted);
+ }
+ return buf.join(' ');
+}
+
+function testPropertyEscapes(regExp, string, expression) {
+ if (!regExp.test(string)) {
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ assert(
+ regExp.test(symbol),
+ `\`${ expression }\` should match ${ formatted } (\`${ symbol }\`)`
+ );
+ }
+ }
+}
+
+function testPropertyOfStrings(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const regExp = args.regExp;
+ const expression = args.expression;
+ const matchStrings = args.matchStrings;
+ const nonMatchStrings = args.nonMatchStrings;
+ const allStrings = matchStrings.join('');
+ if (!regExp.test(allStrings)) {
+ for (const string of matchStrings) {
+ assert(
+ regExp.test(string),
+ `\`${ expression }\` should match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+
+ if (!nonMatchStrings) return;
+
+ const allNonMatchStrings = nonMatchStrings.join('');
+ if (regExp.test(allNonMatchStrings)) {
+ for (const string of nonMatchStrings) {
+ assert(
+ !regExp.test(string),
+ `\`${ expression }\` should not match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+}
+
+// The exact same logic can be used to test extended character classes
+// as enabled through the RegExp `v` flag. This is useful to test not
+// just standalone properties of strings, but also string literals, and
+// set operations.
+const testExtendedCharacterClass = testPropertyOfStrings;
+
+// Returns a function that validates a RegExp match result.
+//
+// Example:
+//
+// var validate = matchValidator(['b'], 1, 'abc');
+// validate(/b/.exec('abc'));
+//
+function matchValidator(expectedEntries, expectedIndex, expectedInput) {
+ return function(match) {
+ assert.compareArray(match, expectedEntries, 'Match entries');
+ assert.sameValue(match.index, expectedIndex, 'Match index');
+ assert.sameValue(match.input, expectedInput, 'Match input');
+ }
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js
new file mode 100644
index 0000000000..02cf2f9e5b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\d]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\d]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js
new file mode 100644
index 0000000000..96c4b87b38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--[0-9]]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--[0-9]]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js
new file mode 100644
index 0000000000..1d337d37a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js
new file mode 100644
index 0000000000..3e27211dc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--_]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--_]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..5ac2d64bc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js
new file mode 100644
index 0000000000..ee83c8c1b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js
@@ -0,0 +1,35 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js
new file mode 100644
index 0000000000..8b27faeb1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\d]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\d]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js
new file mode 100644
index 0000000000..82dd8971f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&[0-9]]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&[0-9]]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js
new file mode 100644
index 0000000000..91eb444cc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js
new file mode 100644
index 0000000000..87f8a8c182
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js
@@ -0,0 +1,35 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&_]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..fe4f943999
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js
new file mode 100644
index 0000000000..f6314e94e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js
new file mode 100644
index 0000000000..5bbf70287c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\d]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js
new file mode 100644
index 0000000000..28d3a42c68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}[0-9]]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js
new file mode 100644
index 0000000000..707dd8047a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js
new file mode 100644
index 0000000000..ddd9eeb7a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js
@@ -0,0 +1,37 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}_]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}_]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..3596853330
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js
@@ -0,0 +1,46 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js
new file mode 100644
index 0000000000..8780335787
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);