|
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts"; |
|
import { bench, runBenchmarks } from "https://deno.land/[email protected]/testing/bench.ts"; |
|
import { add as wasm } from "./pkg/add.js"; |
|
|
|
function add(n: number): number { |
|
if (n <= 0) return 0; |
|
let sum = 0; |
|
for (let i = 1; i <= n; i++) { |
|
sum += i; |
|
} |
|
return sum; |
|
} |
|
|
|
function recursive(n: number): number { |
|
if (n <= 0) { |
|
return 0; |
|
} else { |
|
return n + recursive(n - 1); |
|
} |
|
} |
|
|
|
function reduce(n: number): number { |
|
if (n <= 0) return 0; |
|
return new Array(n).fill(0).map((_, i) => i + 1).reduce((a, c) => a + c); |
|
} |
|
|
|
Deno.test({ |
|
name: "add", |
|
fn() { |
|
assertEquals(6, add(3)); |
|
assertEquals(10, add(4)); |
|
assertEquals(1, add(1)); |
|
assertEquals(0, add(0)); |
|
assertEquals(0, add(-10)); |
|
}, |
|
}); |
|
|
|
Deno.test({ |
|
name: "recursive", |
|
fn() { |
|
assertEquals(6, recursive(3)); |
|
assertEquals(10, recursive(4)); |
|
assertEquals(1, recursive(1)); |
|
assertEquals(0, recursive(0)); |
|
assertEquals(0, recursive(-10)); |
|
} |
|
}); |
|
|
|
Deno.test({ |
|
name: "reduce", |
|
fn() { |
|
assertEquals(6, reduce(3)); |
|
assertEquals(10, reduce(4)); |
|
assertEquals(1, reduce(1)); |
|
assertEquals(0, reduce(0)); |
|
assertEquals(0, reduce(-10)); |
|
}, |
|
}); |
|
|
|
Deno.test({ |
|
name: "wasm", |
|
fn() { |
|
assertEquals(6, wasm(3)); |
|
assertEquals(10, wasm(4)); |
|
assertEquals(1, wasm(1)); |
|
assertEquals(0, wasm(0)); |
|
assertEquals(0, wasm(-10)); |
|
}, |
|
}); |
|
|
|
bench({ |
|
name: "add", |
|
runs: 1001, |
|
func(b) { |
|
b.start(); |
|
for (let i = 0; i < 1e5; i++) { |
|
add(1000); |
|
} |
|
b.stop(); |
|
}, |
|
}); |
|
|
|
bench({ |
|
name: "recursive", |
|
runs: 1002, |
|
func(b) { |
|
b.start(); |
|
for (let i = 0; i < 1e5; i++) { |
|
recursive(1000); |
|
} |
|
b.stop(); |
|
} |
|
}); |
|
|
|
bench({ |
|
name: "reduce", |
|
runs: 1003, |
|
func(b) { |
|
b.start(); |
|
for (let i = 0; i < 1e5; i++) { |
|
reduce(1000); |
|
} |
|
b.stop(); |
|
}, |
|
}); |
|
|
|
bench({ |
|
name: "wasm", |
|
runs: 1004, |
|
func(b) { |
|
b.start(); |
|
for (let i = 0; i < 1e5; i++) { |
|
wasm(1000); |
|
} |
|
b.stop(); |
|
}, |
|
}); |
|
|
|
runBenchmarks(); |