sort-cmpfn-kindchange.js 1.66 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// 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);

25
createSortSuite(
26 27
    'PackedSmiToPackedDouble', 1000, CreateSortFn([cmp_packed_smi_to_double]),
    CreatePackedSmiArray, AssertPackedDoubleElements);
28
createSortSuite(
29 30
    'HoleySmiToHoleyDouble', 1000, CreateSortFn([cmp_holey_smi_to_double]),
    CreateHoleySmiArray, AssertHoleyDoubleElements);
31
createSortSuite(
32 33
    'PackedDoubleToHoleyDouble', 1000, CreateSortFn([cmp_double_to_double]),
    CreatePackedDoubleArray, AssertHoleyDoubleElements);
34 35 36 37

let cmp_packed_to_dict = CreateCompareFn(() => array_to_sort[%MaxSmi()] = 42);
let cmp_holey_to_dict = CreateCompareFn(() => array_to_sort[%MaxSmi()] = 42);

38
createSortSuite(
39 40
    'PackedElementToDictionary', 1000, CreateSortFn([cmp_packed_to_dict]),
    CreatePackedObjectArray, AssertDictionaryElements);
41
createSortSuite(
42 43
    'HoleyElementToDictionary', 1000, CreateSortFn([cmp_holey_to_dict]),
    CreateHoleyObjectArray, AssertDictionaryElements);