blob: db6358449985269cc16cfe86efb3a0ef39cb49af [file] [log] [blame]
// Copyright 2019 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.
// Compare `in` operator on different types of arrays.
const size = 1e5;
let packed_smi = [];
let packed_double = [];
let packed_elements = [];
let holey_smi = new Array(size);
let holey_double = new Array(size);
let holey_elements = new Array(size);
let sparse_smi = new Array(size);
let sparse_double = new Array(size);
let sparse_elements = new Array(size);
let typed_uint8 = new Uint8Array(size);
let typed_int32 = new Int32Array(size);
let typed_float = new Float64Array(size);
for (let i = 0; i < size; ++i) {
packed_smi[i] = i;
packed_double[i] = i + 0.1;
packed_elements[i] = "" + i;
holey_smi[i] = i;
holey_double[i] = i + 0.1;
holey_elements[i] = "" + i;
typed_uint8[i] = i % 0x100;
typed_int32[i] = i;
typed_float[i] = i + 0.1;
}
let sparse = 0;
for (let i = 0; i < size; i += 100) {
++sparse;
sparse_smi[i] = i;
sparse_double[i] = i + 0.1;
sparse_elements[i] = "" + i;
}
// ----------------------------------------------------------------------------
// Benchmark: Packed SMI
// ----------------------------------------------------------------------------
function PackedSMI() {
let cnt = 0;
let ary = packed_smi;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Packed Double
// ----------------------------------------------------------------------------
function PackedDouble() {
let cnt = 0;
let ary = packed_double;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Packed Elements
// ----------------------------------------------------------------------------
function PackedElements() {
let cnt = 0;
let ary = packed_elements;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Holey SMI
// ----------------------------------------------------------------------------
function HoleySMI() {
let cnt = 0;
let ary = holey_smi;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Holey Double
// ----------------------------------------------------------------------------
function HoleyDouble() {
let cnt = 0;
let ary = holey_double;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Holey Elements
// ----------------------------------------------------------------------------
function HoleyElements() {
let cnt = 0;
let ary = holey_elements;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Sparse SMI
// ----------------------------------------------------------------------------
function SparseSMI() {
let cnt = 0;
let ary = sparse_smi;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != sparse) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Sparse Double
// ----------------------------------------------------------------------------
function SparseDouble() {
let cnt = 0;
let ary = sparse_double;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != sparse) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Sparse Elements
// ----------------------------------------------------------------------------
function SparseElements() {
let cnt = 0;
let ary = sparse_elements;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != sparse) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Typed Uint8
// ----------------------------------------------------------------------------
function TypedUint8() {
let cnt = 0;
let ary = typed_uint8;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Typed Int32
// ----------------------------------------------------------------------------
function TypedInt32() {
let cnt = 0;
let ary = typed_int32;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Benchmark: Typed Float64
// ----------------------------------------------------------------------------
function TypedFloat64() {
let cnt = 0;
let ary = typed_float;
for (let i = 0; i < ary.length; ++i) {
if (i in ary) ++cnt;
}
if (cnt != size) throw 666;
}
// ----------------------------------------------------------------------------
// Setup and Run
// ----------------------------------------------------------------------------
load('../base.js');
var success = true;
function PrintResult(name, result) {
print(name + '-ArrayInOperator(Score): ' + result);
}
function PrintError(name, error) {
PrintResult('Error: ' + name, error);
success = false;
}
function CreateBenchmark(name, f) {
new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 5, f) ]);
}
CreateBenchmark('PackedSMI', PackedSMI);
CreateBenchmark('PackedDouble', PackedDouble);
CreateBenchmark('PackedElements', PackedElements);
CreateBenchmark('HoleySMI', HoleySMI);
CreateBenchmark('HoleyDouble', HoleyDouble);
CreateBenchmark('HoleyElements', HoleyElements);
CreateBenchmark('SparseSMI', SparseSMI);
CreateBenchmark('SparseDouble', SparseDouble);
CreateBenchmark('SparseElements', SparseElements);
CreateBenchmark('TypedUint8', TypedUint8);
CreateBenchmark('TypedInt32', TypedInt32);
CreateBenchmark('TypedFloat64', TypedFloat64);
BenchmarkSuite.config.doWarmup = true;
BenchmarkSuite.config.doDeterministic = true;
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});