@loken/hierarchies
Version:
Library for working with hierarchies of identifiers and identifiable objects.
85 lines (84 loc) • 3.05 kB
JavaScript
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