| // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:collection'; |
| // Benchmark for https://github.com/dart-lang/sdk/issues/48641. |
| // |
| // Measures the average time needed for a lookup in Sets of integers. |
| |
| import 'dart:math'; |
| |
| import 'package:benchmark_harness/benchmark_harness.dart'; |
| |
| class SetBenchmark extends BenchmarkBase { |
| SetBenchmark(String name, this.mySet) : super(name); |
| |
| final Set<int> mySet; |
| |
| @override |
| void run() { |
| mySet.contains(123456789); |
| } |
| } |
| |
| void main() { |
| final list = [ |
| for (int i = 0; i < 14790; i++) (i + 1) * 0x10000000 + 123456789 |
| ]; |
| |
| final r = Random(); |
| final randomList = List<int>.generate(14790, (_) => r.nextInt(1 << 31)); |
| |
| final benchmarks = [ |
| () => SetBenchmark('IntegerSetLookup.DefaultHashSet', {...list}), |
| () => |
| SetBenchmark('IntegerSetLookup.HashSet', HashSet<int>()..addAll(list)), |
| () => |
| SetBenchmark('IntegerSetLookup.DefaultHashSet_Random', {...randomList}), |
| () => SetBenchmark( |
| 'IntegerSetLookup.HashSet_Random', HashSet<int>()..addAll(randomList)), |
| ]; |
| for (final benchmark in benchmarks) { |
| benchmark().report(); |
| } |
| } |