From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- js/src/jit-test/tests/ion/compare-char.js | 189 ++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 js/src/jit-test/tests/ion/compare-char.js (limited to 'js/src/jit-test/tests/ion/compare-char.js') diff --git a/js/src/jit-test/tests/ion/compare-char.js b/js/src/jit-test/tests/ion/compare-char.js new file mode 100644 index 0000000000..e63d69decc --- /dev/null +++ b/js/src/jit-test/tests/ion/compare-char.js @@ -0,0 +1,189 @@ +function IsASCIIAlphaString_CharCodeAt(s) { + for (var i = 0; i < s.length; i++) { + var c = s.charCodeAt(i); + if (!((0x41 <= c && c <= 0x5A) || (0x61 <= c && c <= 0x7A))) + return false; + } + return true; +} + +function IsASCIIAlphaString_CharAt(s) { + for (var i = 0; i < s.length; i++) { + var c = s.charAt(i); + if (!(("A" <= c && c <= "Z") || ("a" <= c && c <= "z"))) + return false; + } + return true; +} + +function IsASCIIAlphaString_GetElem(s) { + for (var i = 0; i < s.length; i++) { + var c = s[i]; + if (!(("A" <= c && c <= "Z") || ("a" <= c && c <= "z"))) + return false; + } + return true; +} + +function IsASCIIAlphaString_GetElem_GetElem(s) { + var range = "AZaz"; + for (var i = 0; i < s.length; i++) { + var c = s[i]; + if (!((range[0] <= c && c <= range[1]) || (range[2] <= c && c <= range[3]))) + return false; + } + return true; +} + +function IsGreekOrCyrillicString_CharCodeAt(s) { + // U+0370 (GREEK CAPITAL LETTER HETA) + // U+03FF (GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL) + // U+0400 (CYRILLIC CAPITAL LETTER IE WITH GRAVE) + // U+052F (CYRILLIC SMALL LETTER EL WITH DESCENDER) + for (var i = 0; i < s.length; i++) { + var c = s.charCodeAt(i); + if (!((0x0370 <= c && c <= 0x03FF) || (0x400 <= c && c <= 0x052F))) + return false; + } + return true; +} + +function IsGreekOrCyrillicString_CharAt(s) { + for (var i = 0; i < s.length; i++) { + var c = s.charAt(i); + if (!(("Ͱ" <= c && c <= "Ͽ") || ("Ѐ" <= c && c <= "ԯ"))) + return false; + } + return true; +} + +function IsGreekOrCyrillicString_GetElem(s) { + for (var i = 0; i < s.length; i++) { + var c = s[i]; + if (!(("Ͱ" <= c && c <= "Ͽ") || ("Ѐ" <= c && c <= "ԯ"))) + return false; + } + return true; +} + +function IsGreekOrCyrillicString_GetElem_GetElem(s) { + var range = "ͰϿЀԯ"; + for (var i = 0; i < s.length; i++) { + var c = s[i]; + if (!((range[0] <= c && c <= range[1]) || (range[2] <= c && c <= range[3]))) + return false; + } + return true; +} + +function main() { + function compareLatin1() { + var strings = ["ABCABCABC", "abcabcabc"]; + var compare = "aAbD"; + var q = 0; + for (var i = 0; i < 200; ++i) { + var str = strings[i & 1]; + for (var j = 0; j < str.length; ++j) { + if (str[j] === "a") + q++; + if ("A" == str[j]) + q++; + if (str[j] != "b") + q++; + if ("D" !== str[j]) + q++; + if (str[j] === compare[0]) + q++; + if (compare[1] == str[j]) + q++; + if (str[j] != compare[2]) + q++; + if (compare[3] !== str[j]) + q++; + } + } + assertEq(q, 100*3*2 + 100*3*2 + 100*15*2 + 100*18*2); + } + function compareTwoByte() { + var strings = ["āĉœāĉœāĉœ", "abcabcabc"]; + var compare = "œĉāƉ"; + var q = 0; + for (var i = 0; i < 200; ++i) { + var str = strings[i & 1]; + for (var j = 0; j < str.length; ++j) { + if ("œ" === str[j]) + q++; + if (str[j] == "ĉ") + q++; + if ("ā" != str[j]) + q++; + if (str[j] !== "Ɖ") + q++; + if (compare[0] === str[j]) + q++; + if (str[j] == compare[1]) + q++; + if (compare[2] != str[j]) + q++; + if (str[j] !== compare[3]) + q++; + } + } + assertEq(q, 100*3*2 + 100*3*2 + 100*15*2 + 100*18*2); + } + function compareRangeLatin1() { + var strings = [ + "ABCABCABC", // all upper + "abcabcabc", // all lower + "abcABCabc", // lower and upper + "abcabc123", // characters below limit + "abc[_]ABC", // characters between limit + "ABC{|}abc", // characters above limit + "!#$456_~ÿ", // no matches at all + "aBcZyyZUU", // - + ]; + for (var i = 0; i < 200; ++i) { + var str = strings[i & 7]; + var resultCharCodeAt = IsASCIIAlphaString_CharCodeAt(str); + var resultCharAt = IsASCIIAlphaString_CharAt(str); + var resultGetElem = IsASCIIAlphaString_GetElem(str); + var resultGetElemGetElem = IsASCIIAlphaString_GetElem_GetElem(str); + + assertEq(resultCharAt, resultCharCodeAt); + assertEq(resultGetElem, resultCharCodeAt); + assertEq(resultGetElemGetElem, resultCharCodeAt); + } + } + function compareRangeTwoByte() { + var strings = [ + "αβγΑΒΓαβγ", // all Greek + "АБВабвАБВ", // all Cyrillic + "αβγабвАБΓ", // Greek and Cyrillic + "αβγāēōАБВ", // characters below limit + "αβγԱԲԳАБВ", // characters above limit + "abcāēōԱԲԳ", // no matches at all + "𝐀𝐁𝐂𝐀𝐁𝐂𝐀𝐁𝐂", // (non-BMP) + "abcabcabc", // - + ]; + for (var i = 0; i < 200; ++i) { + var str = strings[i & 7]; + var resultCharCodeAt = IsGreekOrCyrillicString_CharCodeAt(str); + var resultCharAt = IsGreekOrCyrillicString_CharAt(str); + var resultGetElem = IsGreekOrCyrillicString_GetElem(str); + var resultGetElemGetElem = IsGreekOrCyrillicString_GetElem_GetElem(str); + + assertEq(resultCharAt, resultCharCodeAt); + assertEq(resultGetElem, resultCharCodeAt); + assertEq(resultGetElemGetElem, resultCharCodeAt); + } + } + + compareLatin1(); + compareTwoByte(); + compareRangeLatin1(); + compareRangeTwoByte(); +} + +for (var i = 0; i < 15; ++i) { + main(); +} -- cgit v1.2.3