/** * POSIX Issue 7–style integer comparison primaries for /bin/test (mirrors * packages/bare-os-coreutils/src/test.js evalTest three-arg int branch). */ import test from 'brittle' /** @param {string | number} a @param {string} op @param {string | number} b */ function evalIntRel(a, op, b) { const la = Number.parseInt(String(a), 10) const lb = Number.parseInt(String(b), 10) if (!Number.isFinite(la) || !Number.isFinite(lb)) return false switch (op) { case '-eq': return la === lb case '-ne': return la !== lb case '-lt': return la < lb case '-le': return la <= lb case '-gt': return la > lb case '-ge': return la >= lb default: return false } } test('posix test integer relations (-eq -ne -lt -le -gt -ge)', async (t) => { t.ok(evalIntRel(0, '-eq', 0)) t.ok(evalIntRel(3, '-ne', 4)) t.ok(evalIntRel(2, '-lt', 5)) t.ok(evalIntRel(5, '-le', 5)) t.ok(evalIntRel(9, '-gt', 1)) t.ok(evalIntRel(7, '-ge', 7)) t.absent(evalIntRel(1, '-eq', 2)) t.absent(evalIntRel('x', '-eq', 1)) t.absent(evalIntRel(1, '-eq', 'y')) })