← back to Sanderson Onboard

tk10873/test_cross_validate.mjs

22 lines

#!/usr/bin/env node
// test_cross_validate.mjs — unit tests for classifyVsFeed (pure, no DB/network).
import { classifyVsFeed } from './cross_validate_feed.mjs';

let pass = 0, fail = 0;
const ok = (c, m) => { if (c) pass++; else { fail++; console.error(`FAIL: ${m}`); } };

ok(classifyVsFeed(176, 176).klass === 'CONFIRMED', 'identical -> CONFIRMED');
ok(classifyVsFeed(176, 178).klass === 'CONFIRMED', 'within 2% -> CONFIRMED');
ok(classifyVsFeed(422, 1073.3).klass === 'DISCREPANT_UNIT_2_5X', '2.54x -> DISCREPANT_UNIT_2_5X');
ok(classifyVsFeed(100, 254).klass === 'DISCREPANT_UNIT_2_5X', 'exactly 2.54x -> unit discrepancy');
ok(classifyVsFeed(100, 500).klass === 'DISCREPANT_OTHER', '5x -> DISCREPANT_OTHER');
ok(classifyVsFeed(100, 150).klass === 'DISCREPANT_OTHER', '1.5x -> DISCREPANT_OTHER (outside agree + unit bands)');
ok(classifyVsFeed(176, null).klass === 'UNVERIFIABLE', 'no feed -> UNVERIFIABLE');
ok(classifyVsFeed(176, 0).klass === 'UNVERIFIABLE', 'zero feed -> UNVERIFIABLE');
ok(classifyVsFeed(0, 176).klass === 'BAD_PROPOSED', 'nonpositive proposed -> BAD_PROPOSED');
// ratio is reported
ok(Math.abs(classifyVsFeed(422, 1073.3).ratio - 2.543) < 0.01, 'ratio ~2.543 reported');

console.log(`\ntest_cross_validate: ${pass} passed, ${fail} failed`);
process.exit(fail === 0 ? 0 : 1);