blob: 1e6d5b0f5257f61c4a13c4462862aa642c3f2ec8 [file] [log] [blame]
import 'package:kernel/type_propagation/canonicalizer.dart';
main() {
Stopwatch watch = new Stopwatch()..start();
const int lowBiasKeys = 100;
const int highBiasKeys = 10000;
const int noBiasKeys = 1000;
Uint31PairMap map;
// Warm up.
map = new Uint31PairMap();
for (int i = 0; i < noBiasKeys; ++i) {
for (int j = 0; j < noBiasKeys; ++j) {
map.lookup(i, j);
map.put(i + j);
}
}
// Even distributed tuple components.
watch.reset();
map = new Uint31PairMap();
for (int i = 0; i < noBiasKeys; ++i) {
for (int j = 0; j < noBiasKeys; ++j) {
map.lookup(i, j);
map.put(i + j);
}
}
int noBiasTime = watch.elapsedMicroseconds;
// Left-bias: more unique keys in the first component.
watch.reset();
map = new Uint31PairMap();
for (int i = 0; i < highBiasKeys; ++i) {
for (int j = 0; j < lowBiasKeys; ++j) {
map.lookup(i, j);
map.put(i + j);
}
}
int leftBiasTime = watch.elapsedMicroseconds;
// Right-bias: more unique keys in the second component.
watch.reset();
map = new Uint31PairMap();
for (int i = 0; i < lowBiasKeys; ++i) {
for (int j = 0; j < highBiasKeys; ++j) {
map.lookup(i, j);
map.put(i + j);
}
}
int rightBiasTime = watch.elapsedMicroseconds;
print('''
bias.none: ${formatTime(noBiasTime)}
bias.left: ${formatTime(leftBiasTime)}
bias.right: ${formatTime(rightBiasTime)}
''');
}
String formatTime(int microseconds) {
double seconds = microseconds / 1000000.0;
return '$seconds s';
}