summaryrefslogtreecommitdiff
path: root/deps/v8/test/intl/string-localecompare.js
blob: 794a2d13d8225022939e3d0cc6ce5684aa39220d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
58
59
60
// 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.

// Flags: --turbofan --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.
    assertEquals("asdf".localeCompare("asdf\01"), 0);
    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));
%PrepareFunctionForOptimization(check);
check();
check();
check();
%OptimizeFunctionOnNextCall(check);
check();
check();
assertTrue(isOptimized(check));