This commit is contained in:
2023-09-12 15:02:16 +01:00
parent f42096fa64
commit 9e2453444d
74 changed files with 776 additions and 728 deletions

View File

@ -2,104 +2,113 @@ import { bytesToHex } from "@noble/hashes/utils";
import { DefaultQueryOptimizer, FlatReqFilter, QueryOptimizer, ReqFilter } from "@snort/system";
import { compress, expand_filter, flat_merge, get_diff, default as wasmInit } from "@snort/system-query";
import WasmPath from "@snort/system-query/pkg/system_query_bg.wasm";
import { Bench } from 'tinybench';
import { Bench } from "tinybench";
const WasmQueryOptimizer = {
expandFilter: (f: ReqFilter) => {
return expand_filter(f) as Array<FlatReqFilter>;
},
getDiff: (prev: Array<ReqFilter>, next: Array<ReqFilter>) => {
return get_diff(prev, next) as Array<FlatReqFilter>;
},
flatMerge: (all: Array<FlatReqFilter>) => {
return flat_merge(all) as Array<ReqFilter>;
},
compress: (all: Array<ReqFilter>) => {
return compress(all) as Array<ReqFilter>;
}
} as QueryOptimizer;
const makeOnePubkey = () => {
const rnd = globalThis.crypto.getRandomValues(new Uint8Array(32));
return bytesToHex(rnd);
}
expandFilter: (f: ReqFilter) => {
return expand_filter(f) as Array<FlatReqFilter>;
},
getDiff: (prev: Array<ReqFilter>, next: Array<ReqFilter>) => {
return get_diff(prev, next) as Array<FlatReqFilter>;
},
flatMerge: (all: Array<FlatReqFilter>) => {
return flat_merge(all) as Array<ReqFilter>;
},
compress: (all: Array<ReqFilter>) => {
return compress(all) as Array<ReqFilter>;
},
} as QueryOptimizer;
const randomPubkeys = (() => {
const ret = [];
for(let x =0;x<50;x++) {
ret.push(makeOnePubkey());
}
return ret;
})();
const makeOnePubkey = () => {
const rnd = globalThis.crypto.getRandomValues(new Uint8Array(32));
return bytesToHex(rnd);
};
const testExpand = (q: QueryOptimizer) => {
q.expandFilter({
kinds: [1,2,3],
authors: randomPubkeys
});
const randomPubkeys = (() => {
const ret = [];
for (let x = 0; x < 50; x++) {
ret.push(makeOnePubkey());
}
const testGetDiff = (q: QueryOptimizer) => {
q.getDiff([{
return ret;
})();
const testExpand = (q: QueryOptimizer) => {
q.expandFilter({
kinds: [1, 2, 3],
authors: randomPubkeys,
});
};
const testGetDiff = (q: QueryOptimizer) => {
q.getDiff(
[
{
kinds: [1, 2, 3],
authors: randomPubkeys
}], [{
authors: randomPubkeys,
},
],
[
{
kinds: [1, 2, 3, 4, 5],
authors: randomPubkeys
}]);
}
authors: randomPubkeys,
},
],
);
};
const testFlatMerge = (q: QueryOptimizer) => {
q.flatMerge(q.expandFilter({
kinds: [1, 6, 7, 6969],
authors: randomPubkeys
}));
}
q.flatMerge(
q.expandFilter({
kinds: [1, 6, 7, 6969],
authors: randomPubkeys,
}),
);
};
const testCompress = (q: QueryOptimizer) => {
q.compress([
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys
}
])
}
q.compress([
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys,
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys,
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys,
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys,
},
{
kinds: [1, 6, 7, 6969],
authors: randomPubkeys,
},
]);
};
const wasmSuite = new Bench({ time: 1_000 });
const suite = new Bench({ time: 1_000 });
const wasmSuite = new Bench({ time: 1_000 });
const suite = new Bench({ time: 1_000 });
const addTests = (s: Bench, q: QueryOptimizer) => {
s.add("expand", () => testExpand(q));
s.add("get_diff", () => testGetDiff(q));
s.add("flat_merge", () => testFlatMerge(q));
s.add("compress", () => testCompress(q));
}
addTests(suite, DefaultQueryOptimizer);
addTests(wasmSuite, WasmQueryOptimizer);
const runAll = async() => {
await wasmInit(WasmPath);
const addTests = (s: Bench, q: QueryOptimizer) => {
s.add("expand", () => testExpand(q));
s.add("get_diff", () => testGetDiff(q));
s.add("flat_merge", () => testFlatMerge(q));
s.add("compress", () => testCompress(q));
};
console.log("DefaultQueryOptimizer");
await suite.run();
console.table(suite.table());
addTests(suite, DefaultQueryOptimizer);
addTests(wasmSuite, WasmQueryOptimizer);
console.log("WasmQueryOptimizer");
await wasmSuite.run();
console.table(wasmSuite.table());
};
runAll().catch(console.error);
const runAll = async () => {
await wasmInit(WasmPath);
console.log("DefaultQueryOptimizer");
await suite.run();
console.table(suite.table());
console.log("WasmQueryOptimizer");
await wasmSuite.run();
console.table(wasmSuite.table());
};
runAll().catch(console.error);