Source code

Revision control

Copy as Markdown

Other Tools

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();
}