islandflow/services/compute/tests/helpers.ts
dirtydishes 44431c4e66
All checks were successful
CI / Validate (push) Successful in 1m13s
expand ci quality gates
2026-05-30 02:34:28 -04:00

70 lines
1.7 KiB
TypeScript

import type { ClassifierConfig, ClassifierHit } from "../src/classifiers";
import type { FlowPacket } from "@islandflow/types";
export const TEST_CLASSIFIER_CONFIG: ClassifierConfig = {
sweepMinPremium: 40_000,
sweepMinCount: 3,
sweepMinPremiumZ: 2,
spikeMinPremium: 20_000,
spikeMinSize: 400,
spikeMinPremiumZ: 2.5,
spikeMinSizeZ: 2,
zMinSamples: 12,
minNbboCoverage: 0.5,
minAggressorRatio: 0.55,
zeroDteMaxAtmPct: 0.01,
zeroDteMinPremium: 20_000,
zeroDteMinSize: 400
};
export const buildFlowPacket = (
opts: {
id?: string;
source_ts?: number;
ingest_ts?: number;
seq?: number;
trace_id?: string;
members?: string[];
features?: FlowPacket["features"];
join_quality?: FlowPacket["join_quality"];
} = {}
): FlowPacket => {
const id = opts.id ?? "flowpacket:test";
const source_ts = opts.source_ts ?? Date.parse("2025-01-01T14:30:00Z");
const ingest_ts = opts.ingest_ts ?? source_ts;
const seq = opts.seq ?? 1;
const trace_id = opts.trace_id ?? `trace:${id}`;
return {
source_ts,
ingest_ts,
seq,
trace_id,
id,
members: opts.members ?? ["print:1", "print:2"],
features: {
count: 1,
window_ms: 250,
total_premium: 0,
total_size: 0,
first_price: 0,
last_price: 0,
total_premium_z: 0,
total_size_z: 0,
total_premium_baseline_n: 0,
total_size_baseline_n: 0,
nbbo_coverage_ratio: 0,
nbbo_aggressive_buy_ratio: 0,
nbbo_aggressive_sell_ratio: 0,
underlying_mid: 0,
...opts.features
},
join_quality: {
...opts.join_quality
}
};
};
export const getHit = (hits: ClassifierHit[], id: string): ClassifierHit | null => {
return hits.find((hit) => hit.classifier_id === id) ?? null;
};