string-localecompare.js 2.28 KB
Newer Older
1 2 3 4
// Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6 7 8 9 10 11 12 13
// Flags: --opt --allow-natives-syntax --interrupt-budget=1024

function check() {
    // Equal prefix.
    assertTrue("asdf".localeCompare("asdf") == 0);
    assertTrue("asd".localeCompare("asdf") < 0);
    assertTrue("asdff".localeCompare("asdf") > 0);

    // Completely Ignorable.
14
    assertEquals("asdf".localeCompare("asdf\01"), 0);
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
    assertEquals("asdf".localeCompare("as\01df"), 0);
    assertEquals("asdf".localeCompare("\01asdf"), 0);

    // Chars differ.
    assertTrue("asdf".localeCompare("asdq") < 0);
    assertTrue("asdq".localeCompare("asdf") > 0);

    // Interesting locales.
    assertEquals('ö'.localeCompare('oe', 'de'), -1);
    assertEquals('Ö'.localeCompare('oe', 'de'), -1);
    assertEquals('ö'.localeCompare('o', 'de-u-co-phonebk'), 1);
    assertEquals('ö'.localeCompare('p', 'de-u-co-phonebk'), -1);
    assertEquals('Ö'.localeCompare('o', 'de-u-co-phonebk'), 1);
    assertEquals('Ö'.localeCompare('p', 'de-u-co-phonebk'), -1);
    assertEquals('ö'.localeCompare('o\u0308', 'de-u-co-phonebk'), 0);
    assertEquals('ö'.localeCompare('O\u0308', 'de-u-co-phonebk'), -1);
    assertEquals('Ö'.localeCompare('o\u0308', 'de-u-co-phonebk'), 1);
    assertEquals('Ö'.localeCompare('O\u0308', 'de-u-co-phonebk'), 0);

    assertEquals('ch'.localeCompare('ca', 'cs-CZ'), 1);
    assertEquals('AA'.localeCompare('A-A', 'th'), 0);

    // Attempt to hit different cases of the localeCompare fast path.
    assertEquals('aAaaaö'.localeCompare('aaaaaö', 'en-US'), 1);
    assertEquals('aaaaaöA'.localeCompare('aaaaaöa', 'en-US'), 1);
    assertEquals('ab\u0308'.localeCompare('aa\u0308', 'en-US'), 1);
    assertEquals('aA'.localeCompare('aaa', 'en-US'), -1);
    assertEquals('aa'.localeCompare('aAa', 'en-US'), -1);
    assertEquals('aA'.localeCompare('aa', 'en-US'), 1);
    assertEquals('aa'.localeCompare('aA', 'en-US'), -1);
}

// TODO(tebbi): Make isOptimized() from mjsunit.js available in intl tests.
function isOptimized(fun) {
    return (%GetOptimizationStatus(fun) & (1 << 4)) != 0;
}

assertFalse(isOptimized(check));
while (true) {
    var optimized = isOptimized(check);
    check();
    if (optimized) break;
}