// Copyright 2018 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: --allow-natives-syntax assertDoesNotThrow(()=>(new Intl.ListFormat()).format()); // Intl.getCanonicalLocales() will create a HOLEY_ELEMENTS array assertDoesNotThrow(()=>(new Intl.ListFormat()).format(Intl.getCanonicalLocales())); assertDoesNotThrow(()=>(new Intl.ListFormat()).format(Intl.getCanonicalLocales(["en","fr"]))); let arr = ["a","b","c"]; // Test under no HasHoleyElements(); assertFalse(%HasHoleyElements(arr)); assertDoesNotThrow(()=>(new Intl.ListFormat()).format(arr)); // ICU uses bubblesort, so keep the array reasonably small (as of mid-2019: // 100 entries -> 1ms, 1,000 entries -> 64ms, 10,000 entries -> 5s). for (var i = 0; i < 100; i++) { arr.push("xx"); } assertFalse(%HasHoleyElements(arr)); assertDoesNotThrow(()=>(new Intl.ListFormat()).format(arr)); // Test under HasHoleyElements(); arr[arr.length + 10] = "x"; assertTrue(%HasHoleyElements(arr)); assertFalse(%HasDictionaryElements(arr)); assertThrows(()=>(new Intl.ListFormat()).format(arr), TypeError); // Test it work under HasDictionaryElements(); arr = ["a","b","c"]; arr[arr.length + 100000] = "x"; assertTrue(%HasDictionaryElements(arr)); assertThrows(()=>(new Intl.ListFormat()).format(arr), TypeError);