| // 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. |
| |
| load('sort-base.js'); |
| |
| // Creates a comparison function, that will call the provided transform function |
| // after a set amount of comparisons. The transform function should cause the |
| // element kind of the array to change. |
| function CreateCompareFn(transformfn) { |
| return (a, b) => { |
| ++counter; |
| if (counter == kArraySize/2) { |
| transformfn(); |
| } |
| |
| return cmp_smaller(a, b); |
| } |
| } |
| |
| let cmp_packed_smi_to_double = CreateCompareFn(() => array_to_sort.push(0.1)); |
| let cmp_holey_smi_to_double = CreateCompareFn(() => array_to_sort.push(0.1)); |
| let cmp_double_to_double = CreateCompareFn(() => array_to_sort.length *= 2); |
| |
| createSortSuite( |
| 'PackedSmiToPackedDouble', 1000, CreateSortFn([cmp_packed_smi_to_double]), |
| CreatePackedSmiArray, AssertPackedDoubleElements); |
| createSortSuite( |
| 'HoleySmiToHoleyDouble', 1000, CreateSortFn([cmp_holey_smi_to_double]), |
| CreateHoleySmiArray, AssertHoleyDoubleElements); |
| createSortSuite( |
| 'PackedDoubleToHoleyDouble', 1000, CreateSortFn([cmp_double_to_double]), |
| CreatePackedDoubleArray, AssertHoleyDoubleElements); |
| |
| let cmp_packed_to_dict = CreateCompareFn(() => array_to_sort[%MaxSmi()] = 42); |
| let cmp_holey_to_dict = CreateCompareFn(() => array_to_sort[%MaxSmi()] = 42); |
| |
| createSortSuite( |
| 'PackedElementToDictionary', 1000, CreateSortFn([cmp_packed_to_dict]), |
| CreatePackedObjectArray, AssertDictionaryElements); |
| createSortSuite( |
| 'HoleyElementToDictionary', 1000, CreateSortFn([cmp_holey_to_dict]), |
| CreateHoleyObjectArray, AssertDictionaryElements); |