Index: test/codegen/expect/collection/src/comparators.js |
diff --git a/test/codegen/expect/collection/src/comparators.js b/test/codegen/expect/collection/src/comparators.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..57a1cec2fe1ef53f6e9651bb71659817a2f9fccb |
--- /dev/null |
+++ b/test/codegen/expect/collection/src/comparators.js |
@@ -0,0 +1,299 @@ |
+dart_library.library('collection/src/comparators', null, /* Imports */[ |
+ "dart/_runtime", |
+ 'dart/core' |
+], /* Lazy imports */[ |
+], function(exports, dart, core) { |
+ 'use strict'; |
+ let dartx = dart.dartx; |
+ const _zero = 48; |
+ const _upperCaseA = 65; |
+ const _upperCaseZ = 90; |
+ const _lowerCaseA = 97; |
+ const _lowerCaseZ = 122; |
+ const _asciiCaseBit = 32; |
+ function equalsIgnoreAsciiCase(a, b) { |
+ if (a[dartx.length] != b[dartx.length]) |
+ return false; |
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) { |
+ let aChar = a[dartx.codeUnitAt](i); |
+ let bChar = b[dartx.codeUnitAt](i); |
+ if (aChar == bChar) |
+ continue; |
+ if ((dart.notNull(aChar) ^ dart.notNull(bChar)) != _asciiCaseBit) |
+ return false; |
+ let aCharUpperCase = dart.notNull(aChar) | dart.notNull(_asciiCaseBit); |
+ if (dart.notNull(_upperCaseA) <= dart.notNull(aCharUpperCase) && dart.notNull(aCharUpperCase) <= dart.notNull(_upperCaseZ)) { |
+ continue; |
+ } |
+ return false; |
+ } |
+ return true; |
+ } |
+ dart.fn(equalsIgnoreAsciiCase, core.bool, [core.String, core.String]); |
+ function hashIgnoreAsciiCase(string) { |
+ let hash = 0; |
+ for (let i = 0; dart.notNull(i) < dart.notNull(string[dartx.length]); i = dart.notNull(i) + 1) { |
+ let char = string[dartx.codeUnitAt](i); |
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(char) && dart.notNull(char) <= dart.notNull(_lowerCaseZ)) { |
+ char = dart.notNull(char) - dart.notNull(_asciiCaseBit); |
+ } |
+ hash = 536870911 & dart.notNull(hash) + dart.notNull(char); |
+ hash = 536870911 & dart.notNull(hash) + ((524287 & dart.notNull(hash)) << 10); |
+ hash = dart.notNull(hash) >> 6; |
+ } |
+ hash = 536870911 & dart.notNull(hash) + ((67108863 & dart.notNull(hash)) << 3); |
+ hash = dart.notNull(hash) >> 11; |
+ return 536870911 & dart.notNull(hash) + ((16383 & dart.notNull(hash)) << 15); |
+ } |
+ dart.fn(hashIgnoreAsciiCase, core.int, [core.String]); |
+ function compareAsciiUpperCase(a, b) { |
+ let defaultResult = 0; |
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) { |
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length])) |
+ return 1; |
+ let aChar = a[dartx.codeUnitAt](i); |
+ let bChar = b[dartx.codeUnitAt](i); |
+ if (aChar == bChar) |
+ continue; |
+ let aUpperCase = aChar; |
+ let bUpperCase = bChar; |
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_lowerCaseZ)) { |
+ aUpperCase = dart.notNull(aUpperCase) - dart.notNull(_asciiCaseBit); |
+ } |
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_lowerCaseZ)) { |
+ bUpperCase = dart.notNull(bUpperCase) - dart.notNull(_asciiCaseBit); |
+ } |
+ if (aUpperCase != bUpperCase) |
+ return (dart.notNull(aUpperCase) - dart.notNull(bUpperCase))[dartx.sign]; |
+ if (defaultResult == 0) |
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar); |
+ } |
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length])) |
+ return -1; |
+ return defaultResult[dartx.sign]; |
+ } |
+ dart.fn(compareAsciiUpperCase, core.int, [core.String, core.String]); |
+ function compareAsciiLowerCase(a, b) { |
+ let defaultResult = 0; |
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) { |
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length])) |
+ return 1; |
+ let aChar = a[dartx.codeUnitAt](i); |
+ let bChar = b[dartx.codeUnitAt](i); |
+ if (aChar == bChar) |
+ continue; |
+ let aLowerCase = aChar; |
+ let bLowerCase = bChar; |
+ if (dart.notNull(_upperCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_upperCaseZ)) { |
+ bLowerCase = dart.notNull(bLowerCase) + dart.notNull(_asciiCaseBit); |
+ } |
+ if (dart.notNull(_upperCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_upperCaseZ)) { |
+ aLowerCase = dart.notNull(aLowerCase) + dart.notNull(_asciiCaseBit); |
+ } |
+ if (aLowerCase != bLowerCase) |
+ return (dart.notNull(aLowerCase) - dart.notNull(bLowerCase))[dartx.sign]; |
+ if (defaultResult == 0) |
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar); |
+ } |
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length])) |
+ return -1; |
+ return defaultResult[dartx.sign]; |
+ } |
+ dart.fn(compareAsciiLowerCase, core.int, [core.String, core.String]); |
+ function compareNatural(a, b) { |
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) { |
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length])) |
+ return 1; |
+ let aChar = a[dartx.codeUnitAt](i); |
+ let bChar = b[dartx.codeUnitAt](i); |
+ if (aChar != bChar) { |
+ return _compareNaturally(a, b, i, aChar, bChar); |
+ } |
+ } |
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length])) |
+ return -1; |
+ return 0; |
+ } |
+ dart.fn(compareNatural, core.int, [core.String, core.String]); |
+ function compareAsciiLowerCaseNatural(a, b) { |
+ let defaultResult = 0; |
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) { |
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length])) |
+ return 1; |
+ let aChar = a[dartx.codeUnitAt](i); |
+ let bChar = b[dartx.codeUnitAt](i); |
+ if (aChar == bChar) |
+ continue; |
+ let aLowerCase = aChar; |
+ let bLowerCase = bChar; |
+ if (dart.notNull(_upperCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_upperCaseZ)) { |
+ aLowerCase = dart.notNull(aLowerCase) + dart.notNull(_asciiCaseBit); |
+ } |
+ if (dart.notNull(_upperCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_upperCaseZ)) { |
+ bLowerCase = dart.notNull(bLowerCase) + dart.notNull(_asciiCaseBit); |
+ } |
+ if (aLowerCase != bLowerCase) { |
+ return _compareNaturally(a, b, i, aLowerCase, bLowerCase); |
+ } |
+ if (defaultResult == 0) |
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar); |
+ } |
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length])) |
+ return -1; |
+ return defaultResult[dartx.sign]; |
+ } |
+ dart.fn(compareAsciiLowerCaseNatural, core.int, [core.String, core.String]); |
+ function compareAsciiUpperCaseNatural(a, b) { |
+ let defaultResult = 0; |
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) { |
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length])) |
+ return 1; |
+ let aChar = a[dartx.codeUnitAt](i); |
+ let bChar = b[dartx.codeUnitAt](i); |
+ if (aChar == bChar) |
+ continue; |
+ let aUpperCase = aChar; |
+ let bUpperCase = bChar; |
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_lowerCaseZ)) { |
+ aUpperCase = dart.notNull(aUpperCase) - dart.notNull(_asciiCaseBit); |
+ } |
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_lowerCaseZ)) { |
+ bUpperCase = dart.notNull(bUpperCase) - dart.notNull(_asciiCaseBit); |
+ } |
+ if (aUpperCase != bUpperCase) { |
+ return _compareNaturally(a, b, i, aUpperCase, bUpperCase); |
+ } |
+ if (defaultResult == 0) |
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar); |
+ } |
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length])) |
+ return -1; |
+ return defaultResult[dartx.sign]; |
+ } |
+ dart.fn(compareAsciiUpperCaseNatural, core.int, [core.String, core.String]); |
+ function _compareNaturally(a, b, index, aChar, bChar) { |
+ dart.assert(aChar != bChar); |
+ let aIsDigit = _isDigit(aChar); |
+ let bIsDigit = _isDigit(bChar); |
+ if (dart.notNull(aIsDigit)) { |
+ if (dart.notNull(bIsDigit)) { |
+ return _compareNumerically(a, b, aChar, bChar, index); |
+ } else if (dart.notNull(index) > 0 && dart.notNull(_isDigit(a[dartx.codeUnitAt](dart.notNull(index) - 1)))) { |
+ return 1; |
+ } |
+ } else if (dart.notNull(bIsDigit) && dart.notNull(index) > 0 && dart.notNull(_isDigit(b[dartx.codeUnitAt](dart.notNull(index) - 1)))) { |
+ return -1; |
+ } |
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign]; |
+ } |
+ dart.fn(_compareNaturally, core.int, [core.String, core.String, core.int, core.int, core.int]); |
+ function _compareNumerically(a, b, aChar, bChar, index) { |
+ if (dart.notNull(_isNonZeroNumberSuffix(a, index))) { |
+ let result = _compareDigitCount(a, b, index, index); |
+ if (result != 0) |
+ return result; |
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign]; |
+ } |
+ let aIndex = index; |
+ let bIndex = index; |
+ if (aChar == _zero) { |
+ do { |
+ aIndex = dart.notNull(aIndex) + 1; |
+ if (aIndex == a[dartx.length]) |
+ return -1; |
+ aChar = a[dartx.codeUnitAt](aIndex); |
+ } while (aChar == _zero); |
+ if (!dart.notNull(_isDigit(aChar))) |
+ return -1; |
+ } else if (bChar == _zero) { |
+ do { |
+ bIndex = dart.notNull(bIndex) + 1; |
+ if (bIndex == b[dartx.length]) |
+ return 1; |
+ bChar = b[dartx.codeUnitAt](bIndex); |
+ } while (bChar == _zero); |
+ if (!dart.notNull(_isDigit(bChar))) |
+ return 1; |
+ } |
+ if (aChar != bChar) { |
+ let result = _compareDigitCount(a, b, aIndex, bIndex); |
+ if (result != 0) |
+ return result; |
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign]; |
+ } |
+ while (true) { |
+ let aIsDigit = false; |
+ let bIsDigit = false; |
+ aChar = 0; |
+ bChar = 0; |
+ if ((aIndex = dart.notNull(aIndex) + 1) < dart.notNull(a[dartx.length])) { |
+ aChar = a[dartx.codeUnitAt](aIndex); |
+ aIsDigit = _isDigit(aChar); |
+ } |
+ if ((bIndex = dart.notNull(bIndex) + 1) < dart.notNull(b[dartx.length])) { |
+ bChar = b[dartx.codeUnitAt](bIndex); |
+ bIsDigit = _isDigit(bChar); |
+ } |
+ if (dart.notNull(aIsDigit)) { |
+ if (dart.notNull(bIsDigit)) { |
+ if (aChar == bChar) |
+ continue; |
+ break; |
+ } |
+ return 1; |
+ } else if (dart.notNull(bIsDigit)) { |
+ return -1; |
+ } else { |
+ return (dart.notNull(aIndex) - dart.notNull(bIndex))[dartx.sign]; |
+ } |
+ } |
+ let result = _compareDigitCount(a, b, aIndex, bIndex); |
+ if (result != 0) |
+ return result; |
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign]; |
+ } |
+ dart.fn(_compareNumerically, core.int, [core.String, core.String, core.int, core.int, core.int]); |
+ function _compareDigitCount(a, b, i, j) { |
+ while ((i = dart.notNull(i) + 1) < dart.notNull(a[dartx.length])) { |
+ let aIsDigit = _isDigit(a[dartx.codeUnitAt](i)); |
+ if ((j = dart.notNull(j) + 1) == b[dartx.length]) |
+ return dart.notNull(aIsDigit) ? 1 : 0; |
+ let bIsDigit = _isDigit(b[dartx.codeUnitAt](j)); |
+ if (dart.notNull(aIsDigit)) { |
+ if (dart.notNull(bIsDigit)) |
+ continue; |
+ return 1; |
+ } else if (dart.notNull(bIsDigit)) { |
+ return -1; |
+ } else { |
+ return 0; |
+ } |
+ } |
+ if ((j = dart.notNull(j) + 1) < dart.notNull(b[dartx.length]) && dart.notNull(_isDigit(b[dartx.codeUnitAt](j)))) { |
+ return -1; |
+ } |
+ return 0; |
+ } |
+ dart.fn(_compareDigitCount, core.int, [core.String, core.String, core.int, core.int]); |
+ function _isDigit(charCode) { |
+ return (dart.notNull(charCode) ^ dart.notNull(_zero)) <= 9; |
+ } |
+ dart.fn(_isDigit, core.bool, [core.int]); |
+ function _isNonZeroNumberSuffix(string, index) { |
+ while ((index = dart.notNull(index) - 1) >= 0) { |
+ let char = string[dartx.codeUnitAt](index); |
+ if (char != _zero) |
+ return _isDigit(char); |
+ } |
+ return false; |
+ } |
+ dart.fn(_isNonZeroNumberSuffix, core.bool, [core.String, core.int]); |
+ // Exports: |
+ exports.equalsIgnoreAsciiCase = equalsIgnoreAsciiCase; |
+ exports.hashIgnoreAsciiCase = hashIgnoreAsciiCase; |
+ exports.compareAsciiUpperCase = compareAsciiUpperCase; |
+ exports.compareAsciiLowerCase = compareAsciiLowerCase; |
+ exports.compareNatural = compareNatural; |
+ exports.compareAsciiLowerCaseNatural = compareAsciiLowerCaseNatural; |
+ exports.compareAsciiUpperCaseNatural = compareAsciiUpperCaseNatural; |
+}); |