-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbench.ts
More file actions
87 lines (76 loc) · 1.7 KB
/
bench.ts
File metadata and controls
87 lines (76 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import assert from 'assert';
import suite from 'chuhai';
import { Randomator } from './src/lib/randomator';
const id = (x: unknown) => x;
const generator = () => (Math.random() < 0.5 ? 'a' : 'b');
const randomator = Randomator.from(generator);
const mapped = randomator.map(id);
const bound = randomator.bind(null);
console.log('Running Randomator benchmarks...');
// eslint-disable-next-line @typescript-eslint/no-explicit-any
suite('Randomator', (s: any) => {
let results = [];
s.cycle(() => {
results.forEach(result => {
assert(result.match(/[ab]/));
});
results = [];
});
// adds a bench that runs but doesn't get counted when comparing results to others.
s.burn('burn', () => {
results = [
generator(),
randomator(),
randomator.next().value,
randomator.fold()
];
});
s.bench('generator', () => {
results = [
generator(),
generator(),
generator(),
generator()
];
});
s.bench('randomator call', () => {
results = [
randomator(),
randomator(),
randomator(),
randomator()
];
});
s.bench('randomator#next', () => {
results = [
randomator.next().value,
randomator.next().value,
randomator.next().value,
randomator.next().value
];
});
s.bench('randomator#fold', () => {
results = [
randomator.fold(),
randomator.fold(),
randomator.fold(),
randomator.fold()
];
});
s.bench('randomator#map', () => {
results = [
mapped(),
mapped(),
mapped(),
mapped()
];
});
s.bench('bound randomator', () => {
results = [
bound(),
bound(),
bound(),
bound()
];
});
});