/** * The cases `si` and `dur` get wrong when their rounding is written the * obvious way. * * Run: `bun src/lib/utils.check.ts` (there is no unit runner; the suite in * `tests/` drives a running stack). */ import assert from "node:assert/strict" import { dur, si } from "./utils" // Nothing is prefixed in the plain window: these are written with a unit after // them, and "400m ms" is not an improvement on "0.4 ms". assert.equal(si(0), "0") assert.equal(si(0.4), "0.4") assert.equal(si(203.63), "204") // Rounding must not leave a value in the step it just rounded out of. assert.equal(si(999.7), "1k") assert.equal(si(15000), "15k") assert.equal(si(-2.5e6), "-2.5M") // A small reading has to survive as itself; a series of these is not zeroes. assert.equal(si(0.0031, 4), "3.1m") assert.equal(si(0.000031), "31µ") assert.equal(si(1e-9), "1.0e-9") // Two neighbouring readings stay apart at the sparkline readout's four digits. assert.notEqual(si(1234, 4), si(1235, 4)) assert.equal(si(Number.NaN), "--") console.log("si: ok") // The unit follows the size, so no reading is left as a shortened number in // front of a unit the call site guessed. assert.equal(dur(0), "0 ms") assert.equal(dur(203.63), "204 ms") assert.equal(dur(1240), "1.24 s") assert.equal(dur(90_000), "1.5 min") // The plain window down to 0.01 ms, so a fast run keeps one unit across polls. assert.equal(dur(0.4), "0.4 ms") assert.equal(dur(0.0031, 4), "3.1 µs") // Rounding must not leave a value in the step it just rounded out of. assert.equal(dur(999.7), "1 s") assert.equal(dur(59_999), "1 min") assert.equal(dur(Number.NaN), "--") console.log("dur: ok")