UNPKG

@loken/hierarchies

Version:

Library for working with hierarchies of identifiers and identifiable objects.

85 lines (84 loc) 3.05 kB
import { describe, bench, expect } from "vitest"; import { range, iterateSome, iterateAll } from "@loken/utilities"; import { traverseFullSequence, traverseSignalSequence } from "./sequence-traverse.js"; import { flattenFullSequence, flattenSignalSequence } from "./sequence-flatten.js"; import { searchSequence } from "./sequence-search.js"; const counts = [1e3, 1e4, 1e5]; counts.forEach((count) => { describe(`traverse sequence of ${count} elements`, () => { const items = range(1, count); bench("traverseFullSequence", () => { const iterator = iterateSome(items); iterateAll(traverseFullSequence({ first: iterator.next().value, next: (_) => { var _a; return (_a = iterator.next()) == null ? void 0 : _a.value; } })); }), bench("traverseSignalSequence", () => { const iterator = iterateSome(items); iterateAll(traverseSignalSequence({ first: iterator.next().value, signal: (_, s) => { var _a; return s.next((_a = iterator.next()) == null ? void 0 : _a.value); } })); }), bench("flattenFullSequence", () => { const iterator = iterateSome(items); flattenFullSequence({ first: iterator.next().value, next: (_) => { var _a; return (_a = iterator.next()) == null ? void 0 : _a.value; } }); }), bench("flattenSignalSequence", () => { const iterator = iterateSome(items); flattenSignalSequence({ first: iterator.next().value, signal: (_, s) => { var _a; return s.next((_a = iterator.next()) == null ? void 0 : _a.value); } }); }); }); }); counts.forEach((count) => { describe(`search sequence of ${count} elements`, () => { const items = range(1, count), searchId = count / 2, search = (n) => n === searchId; bench("searchGraph", () => { const iterator = iterateSome(items), found = searchSequence({ first: iterator.next().value, next: (_) => { var _a; return (_a = iterator.next()) == null ? void 0 : _a.value; }, search }); expect(found).toEqual(searchId); }), bench("traverseSignalSequence", () => { var _a; const iterator = iterateSome(items), found = (_a = traverseSignalSequence({ first: iterator.next().value, signal: (n, s) => { var _a2; search(n) || (s.skip(), s.next((_a2 = iterator.next()) == null ? void 0 : _a2.value)); } }).next()) == null ? void 0 : _a.value; expect(found).toEqual(searchId); }), bench("flattenSignalGraph", () => { const iterator = iterateSome(items), found = flattenSignalSequence({ first: iterator.next().value, signal: (n, s) => { var _a; search(n) || (s.skip(), s.next((_a = iterator.next()) == null ? void 0 : _a.value)); } })[0]; expect(found).toEqual(searchId); }); }); }); //# sourceMappingURL=sequence.bench.js.map