Module
Collection data structures that are not standard built-in objects in JavaScript. This includes a vector (double-ended queue), binary heap (priority queue), binary search tree, and a red black tree.
Very Popular
Latest
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499import { bench, BenchmarkTimer, runBenchmarks } from "./test_deps.ts";import { range, shuffle, Vector } from "./mod.ts";
const runs = 100;const count = 25000;const start: number = -(count / 2);const end: number = count / 2;const values: number[] = shuffle([...range({ start, end })]);
bench({ name: `Array push ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; b.start(); for (let i = 0; i < count; i++) numbers.push(values[i]); b.stop(); },});
bench({ name: `Vector push ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); b.start(); for (let i = 0; i < count; i++) numbers.push(values[i]); b.stop(); },});
bench({ name: `Vector push ${count} times with initial capacity of ${count}`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(25000); b.start(); for (let i = 0; i < count; i++) numbers.push(values[i]); b.stop(); },});
bench({ name: `Array pop ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; for (let i = 0; i < count; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < count; i++) numbers.pop(); b.stop(); },});
bench({ name: `Vector pop ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); for (let i = 0; i < count; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < count; i++) numbers.pop(); b.stop(); },});
bench({ name: `Vector pop ${count} times with initial capacity of ${count}`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(25000); for (let i = 0; i < count; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < count; i++) numbers.pop(); b.stop(); },});
bench({ name: `Array unshift ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; b.start(); for (let i = 0; i < count; i++) numbers.unshift(values[i]); b.stop(); },});
bench({ name: `Vector unshift ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); b.start(); for (let i = 0; i < count; i++) numbers.unshift(values[i]); b.stop(); },});
bench({ name: `Vector unshift ${count} times with initial capacity of ${count}`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(25000); b.start(); for (let i = 0; i < count; i++) numbers.unshift(values[i]); b.stop(); },});
bench({ name: `Array shift ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; for (let i = 0; i < count; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < count; i++) numbers.shift(); b.stop(); },});
bench({ name: `Vector shift ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); for (let i = 0; i < count; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < count; i++) numbers.shift(); b.stop(); },});
bench({ name: `Vector shift ${count} times with initial capacity of ${count}`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(25000); for (let i = 0; i < count; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < count; i++) numbers.shift(); b.stop(); },});
bench({ name: "Array set length 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; b.start(); for (let i = 0; i < 1000; i++) numbers.length = values[i] + 12500; b.stop(); },});
bench({ name: "Vector set length 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); b.start(); for (let i = 0; i < 1000; i++) numbers.length = values[i] + 12500; b.stop(); },});
bench({ name: "Vector set length 1000 times with initial capacity of 1000", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(1000); b.start(); for (let i = 0; i < 1000; i++) numbers.length = values[i] + 12500; b.stop(); },});
bench({ name: "Vector set capacity 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); numbers.push(1); b.start(); for (let i = 0; i < 1000; i++) numbers.capacity = values[i] + 12501; b.stop(); },});
bench({ name: "Array from Array 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Array.from(numbers); b.stop(); },});
bench({ name: "Vector from Array 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Vector.from(numbers); b.stop(); },});
bench({ name: "Array from Iterable 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Array.from(numbers.values()); b.stop(); },});
bench({ name: "Vector from Iterable 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Vector.from(numbers.values()); b.stop(); },});
bench({ name: "Array from Vector 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Array.from(numbers); b.stop(); },});
bench({ name: "Vector from Vector 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Vector.from(numbers); b.stop(); },});
bench({ name: "Array from Vector values 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Array.from(numbers.values()); b.stop(); },});
bench({ name: "Vector from Vector values 1000 times", runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); for (let i = 0; i < 1000; i++) numbers.push(values[i]); b.start(); for (let i = 0; i < 1000; i++) Vector.from(numbers.values()); b.stop(); },});
bench({ name: `Array set next index ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; b.start(); for (let i = 0; i < count; i++) numbers[i] = values[i]; b.stop(); },});
bench({ name: `Vector set next index ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); b.start(); for (let i = 0; i < count; i++) numbers.set(i, values[i]); b.stop(); },});
bench({ name: `Vector set next index ${count} times with initial capacity of ${count}`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(25000); b.start(); for (let i = 0; i < count; i++) numbers.set(i, values[i]); b.stop(); },});
bench({ name: `Vector set next start index ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(); b.start(); for (let i = 0; i < count; i++) numbers.set(-1 - i, values[i]); b.stop(); },});
bench({ name: `Vector set next start index ${count} times with initial capacity of ${count}`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(25000); b.start(); for (let i = 0; i < count; i++) numbers.set(-1 - i, values[i]); b.stop(); },});
bench({ name: `Array set index ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[] = []; numbers.length = count; b.start(); for (let i = 0; i < count; i++) numbers[i] = values[i]; b.stop(); },});
bench({ name: `Vector set index ${count} times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number> = new Vector(count); numbers.length = count; b.start(); for (let i = 0; i < count; i++) numbers.set(i, values[i]); b.stop(); },});
bench({ name: `Array concat Array 100 times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[][] = [ values.slice(0, count / 2), values.slice(count / 2, count), ]; b.start(); for (let i = 0; i < 100; i++) numbers[0].concat(numbers[1]); b.stop(); },});
bench({ name: `Vector concat Array 100 times`, runs, func: (b: BenchmarkTimer) => { const value: Vector<number> = Vector.from(values.slice(0, count / 2)); const numbers: number[] = values.slice(count / 2, count); b.start(); for (let i = 0; i < 100; i++) value.concat(numbers); b.stop(); },});
bench({ name: `Array concat multiple Arrays 100 times`, runs, func: (b: BenchmarkTimer) => { const numbers: number[][] = [ values.slice(0, count / 4), values.slice(count / 4, 2 * (count / 4)), values.slice(2 * (count / 4), 3 * (count / 4)), values.slice(3 * (count / 4), count), ]; b.start(); for (let i = 0; i < 100; i++) { numbers[0].concat(numbers[1], numbers[2], numbers[3]); } b.stop(); },});
bench({ name: `Vector concat multiple Arrays 100 times`, runs, func: (b: BenchmarkTimer) => { const value: Vector<number> = Vector.from(values.slice(0, count / 4)); const numbers: number[][] = [ values.slice(count / 4, 2 * (count / 4)), values.slice(2 * (count / 4), 3 * (count / 4)), values.slice(3 * (count / 4), count), ]; b.start(); for (let i = 0; i < 100; i++) { value.concat(numbers[0], numbers[1], numbers[2]); } b.stop(); },});
bench({ name: `Array concat Vector 100 times`, runs, func: (b: BenchmarkTimer) => { const value: number[] = values.slice(0, count / 2); const numbers: Vector<number> = Vector.from(values.slice(count / 2, count)); b.start(); for (let i = 0; i < 100; i++) value.concat(numbers.toArray()); b.stop(); },});
bench({ name: `Vector concat Vector 100 times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number>[] = [ Vector.from(values.slice(0, count / 2)), Vector.from(values.slice(count / 2, count)), ]; b.start(); for (let i = 0; i < 100; i++) numbers[0].concat(numbers[1]); b.stop(); },});
bench({ name: `Array concat multiple Vectors 100 times`, runs, func: (b: BenchmarkTimer) => { const value: number[] = values.slice(0, count / 4); const numbers: Vector<number>[] = [ Vector.from(values.slice(count / 4, 2 * (count / 4))), Vector.from(values.slice(2 * (count / 4), 3 * (count / 4))), Vector.from(values.slice(3 * (count / 4), count)), ]; b.start(); for (let i = 0; i < 100; i++) { value.concat( numbers[0].toArray(), numbers[1].toArray(), numbers[2].toArray(), ); } b.stop(); },});
bench({ name: `Vector concat multiple Vectors 100 times`, runs, func: (b: BenchmarkTimer) => { const numbers: Vector<number>[] = [ Vector.from(values.slice(0, count / 4)), Vector.from(values.slice(count / 4, 2 * (count / 4))), Vector.from(values.slice(2 * (count / 4), 3 * (count / 4))), Vector.from(values.slice(3 * (count / 4), count)), ]; b.start(); for (let i = 0; i < 100; i++) { numbers[0].concat(numbers[1], numbers[2], numbers[3]); } b.stop(); },});
if (import.meta.main) runBenchmarks();