-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfor-traditional-array.ts
103 lines (86 loc) · 2.6 KB
/
for-traditional-array.ts
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { Chance } from "chance"
const chance = new Chance(12345)
const chance2 = new Chance(12345)
const chance3 = new Chance(12345)
const chance4 = new Chance(12345)
import Benchmark from "tiny-benchy"
/* ************************************************************************* */
// parameter
import { arr_length } from "./parameters"
console.log("array size of ", arr_length)
/* ************************************************************************* */
// number array
function arr_return() {
const arr = chance4.n(chance4.floating, arr_length)
return arr
}
const arr2 = arr_return()
/* ************************************************************************* */
// functions
function for_traditional() {
// array is made inside the function for fare comparison with for_traditional_full_lockup
const arr = chance.n(chance.floating, arr_length)
let sum = 0
for (let i = 0, l = arr.length; i < l; ++i) {
sum += arr[i]
}
return sum
}
function for_traditional_const() {
// array is made inside the function for fare comparison for_traditional_full_lockup
const arr = chance2.n(chance2.floating, arr_length)
let sum = 0
const l = arr.length
for (let i = 0; i < l; ++i) {
sum += arr[i]
}
return sum
}
function for_traditional_length_lookup() {
// array is made inside the function for fare comparison for_traditional_full_lockup
const arr = chance3.n(chance3.floating, arr_length)
let sum = 0
for (let i = 0; i < arr.length; ++i) {
sum += arr[i]
}
return sum
}
// to only measure its effect on calling inside the for-head
function for_traditional_full_lockup(arr2: number[]) {
let sum = 0
for (let i = 0; i < arr_return().length; ++i) {
sum += arr2[i] // only comparing lookup
}
return sum
}
/* ************************************************************************* */
// test
const r1 = for_traditional()
const r2 = for_traditional_const()
const r3 = for_traditional_length_lookup()
const r4 = for_traditional_full_lockup(arr2)
console.assert(r1 === r2 && r2 === r3 && r3 === r4)
const suite = new Benchmark(100)
// add benchmarks
suite.add("for_traditional", () => {
for_traditional()
})
suite.add("for_traditional_const", () => {
for_traditional_const()
})
suite.add("for_traditional_length_lookup", () => {
for_traditional_length_lookup()
})
// TOO Slow!
// suite.add("for_traditional_full_lockup", () => {
// for_traditional_full_lockup(arr2)
// })
/* ************************************************************************* */
async function main() {
// run benchmark
console.log("\n number array \n")
await suite.run()
}
main().catch((e) => {
throw e
})