Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 30 Oct 2026. What's built · Install 0.1.0
jadpo
Reference: Testing

Testing

Controlling time

On this page

A test never waits for real time. Its clock starts at clock: and moves only when the test moves it, with clock.advance:

example
// domains/planning/queries/overdue_todos.test.jadpotest "a todo due in an hour becomes overdue" {    clock: "2026-01-15T12:00:00Z"    var alice: Principal.user = alice_with_todos()    attempt create_todo(CreateTodo {        title: "Pay rent"        due_at: "2026-01-15T13:00:00Z"    }, alice)    assert list.count(overdue_todos(alice)) == 0    clock.advance(1h)    assert list.count(overdue_todos(alice)) == 1}

clock.advance(1h) moves the clock on by a duration. It belongs to clock, like clock.now (The current time: clock.now). An action reads one time for its whole run, so advancing changes what the next call sees, not a call already running.

The clock only moves forward: a negative duration is the fault clock_backward (Faults). clock.advance is an error anywhere but a test, in a fixture or a seed too (type.test_clock_context).

Schedules don't run by themselves

Advancing the clock doesn't run schedules, so adding a schedule never changes an unrelated test. A schedule test runs one with .run() (Schedule tests).

Randomness

The standard library's random namespace (Standard library) is fixed in tests, as the clock is. It is seeded per test, from the test alone, never from the run's order seed. So a rerun gives the same tokens, codes and shuffles, and a test may name the exact code it expects. New identities share the seed.

Markdown for agents: /docs/controlling-time.md.Built from Jadpo main at a707efb.