{"name":"time_basic.nu","source":"// Test: stdlib/std/time.nu\n//\n// Time output is intrinsically non-deterministic, so we verify only\n// invariants that can be expressed as true/false:\n//\n//   - now_ms / now_seconds / monotonic_ns return positive 64-bit values\n//   - now_seconds * 1000 ≈ now_ms (within 5 s of skew tolerance)\n//   - monotonic_ns is non-decreasing across two reads\n//   - sleep_ms 50 advances the monotonic clock by ≥ 30 ms\n//                                                  (safe lower bound — host\n//                                                   schedulers can be slow)\n\n$ `stdlib/std/time.nu`\n\n@ pb b v s label → v {\n    ( nurl_print label ) ( nurl_print `=` )\n    ( nurl_print ? v `T` `F` ) ( nurl_print `\\n` )\n}\n\n@ main → i {\n    // ── Wall-clock plausibility ───────────────────────────\n    : i ms ( now_ms )\n    : i sec ( now_seconds )\n    : i mono ( monotonic_ns )\n\n    ( pb > ms 0 `now_ms_positive` )\n    ( pb > sec 0 `now_seconds_positive` )\n    ( pb > mono 0 `monotonic_ns_positive` )\n\n    // sec * 1000 should be within 5s of ms (covers the boundary where\n    // ms and sec straddle a second tick).\n    : ~ i diff - ms * sec 1000\n    ? < diff 0 { = diff - 0 diff } {}\n    ( pb < diff 5000 `now_ms_seconds_consistent` )\n\n    // ── Monotonic ordering ────────────────────────────────\n    : i a ( monotonic_ns )\n    : i b ( monotonic_ns )\n    ( pb >= b a `monotonic_non_decreasing` )\n\n    // ── sleep_ms ───────────────────────────────────────────\n    : i t0 ( monotonic_ns )\n    ( sleep_ms 50 )\n    : i ms_elapsed ( elapsed_ms_since t0 )\n    ( pb >= ms_elapsed 30 `slept_at_least_30ms` )\n    // and not absurdly long (e.g. a frozen test would catch on wall-clock)\n    ( pb <= ms_elapsed 5000 `slept_under_5s` )\n\n    // sleep_ms with non-positive values is a no-op\n    : i t1 ( monotonic_ns )\n    ( sleep_ms 0 )\n    ( sleep_ms -100 )\n    : i fast ( elapsed_ms_since t1 )\n    ( pb < fast 100 `nonpositive_sleep_no_op` )\n\n    ( nurl_print `done\\n` )\n    ^ 0\n}\n","bytes":2182}