feat(stdlib): DateTime format/parse + simulated Clock — completes #9
Some checks are pending
docs / build-and-deploy (push) Waiting to run
Some checks are pending
docs / build-and-deploy (push) Waiting to run
Finish issue #9 by adding the two remaining acceptance items on top of the calendar/clock core, still pure-integer and deterministic: DateTime.format(dt, pattern) -> string render an instant via a token pattern (YYYY/YY/MM/DD/HH/mm/ss; other chars pass through) DateTime.parse(text, pattern) -> int read an instant back; -1 on a non-digit where one is expected Clock.now/set/advance/reset a game-controlled simulated clock (the @L_clock global) that never touches the wall clock, so gameplay reading Clock.now() is replay-safe format/parse take a string-LITERAL pattern and are expanded at compile time (field offsets are then constant), folding @fn_str_concat over literal runs and two small runtime helpers: @fn_dt_pad0 (zero-padded field) and @fn_dt_rd (fixed-width digit reader that stops at the terminator and flags malformed input). Clock is a universal i32 global declared in emit_head, so it works in entry and game programs alike. Adds examples/offline_rewards.ludic — the issue's worked "you were away N hours" example, driven from its own entry and asserted in the regression suite — plus selfhost/tests/datetime2.ludic (format/parse round-trip, parse failure, clock), docs (Clock section + 4 pages, DateTime.format/parse pages), inventory and LSP hover. Reseeded; C-free fixpoint holds; all suites green (27 self-host / 46 regression / 29 tools); check.py (366 symbols), check-impl.py (218 ns-methods) and validate.py OK. With this, #9's scope is fully delivered: DateTime/Date/Duration + core ops, format/parse, a deterministic simulated clock, docs + offline-rewards example, and tests. (v1 stays UTC-only, no leap seconds, i32 epoch valid through 2038.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1a2c6ec2c7
commit
b5455cd550
17 changed files with 13902 additions and 12278 deletions
|
|
@ -48,6 +48,7 @@ function cmd_selfhost_test() -> int {
|
|||
sh_case("transcend", "2718 1 148 1000 0 2303 1024 1414 3 250 0 1000 1016")
|
||||
sh_case("vector", "3 4 5 4 6 2 2 11 2 6 999 999 999 1570 5 10")
|
||||
sh_case("datetime", "10800 330 172800 3 2 0 10957 2026 8 30 4 6 1 0 1 29 28 31 2 1 365 946729815 2000 1 1 12 30 15 6 10957 1")
|
||||
sh_case("datetime2", "2026-08-30 07:05:09 30/08/26 0 -1 3600 5400 30 0")
|
||||
sh_case("textsplit", "1 1 1 3 1 1 1 1 1 1 1")
|
||||
sh_case("hash", "-2128831035 -468965076 114400290 114400290 0 -873187034 1095738169 0 1364076727 -2114883783 -845898438 -845898438 -78065325 -78057399 -3750763034362895579 -5808556873153909620 -4100651535478758590 -4100651535478758590 0 -5451962507482445012 7256831767414464289")
|
||||
sh_case("long", "1000000000000 1000000000001 1000000000005 3000000000000 1 1 1 -1000000000000 1000000 13")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue